Какво е TensorFlow? Как работи? Въведение и Archiтекстура

Нека започнем този урок с въведение в TensorFlow:

Какво е TensorFlow?

TensorFlow е платформа от край до край с отворен код за създаване на приложения за машинно обучение. Това е символична математическа библиотека, която използва поток от данни и диференцируемо програмиране за изпълнение на различни задачи, фокусирани върху обучението и изводите на дълбоки невронни мрежи. Той позволява на разработчиците да създават приложения за машинно обучение, като използват различни инструменти, библиотеки и ресурси на общността.

В момента най-известната библиотека за дълбоко обучение в света е TensorFlow на Google. Продуктът на Google използва машинно обучение във всички свои продукти, за да подобри търсачката, превода, надписите на изображения или препоръките.

Пример за TensorFlow

За да дам конкретен пример, потребителите на Google могат да изпитат по-бързо и по-прецизно търсене с AI. Ако потребителят въведе ключова дума в лентата за търсене, Google дава препоръка за това коя може да бъде следващата дума.

Пример за TensorFlow
Пример за TensorFlow

Google иска да използва машинно обучение, за да се възползва от техните масивни набори от данни, за да даде на потребителите най-доброто изживяване. Три различни групи използват машинно обучение:

  • Изследователи
  • Учени по данни
  • Програмистите

Всички те могат да използват един и същ набор от инструменти, за да си сътрудничат помежду си и да подобрят ефективността си.

Google не просто разполага с някакви данни; те имат най-масивния компютър в света, така че Tensor Flow е създаден в мащаб. TensorFlow е библиотека, разработена от Google Brain Team за ускоряване на машинното обучение и дълбоките изследвания на невронни мрежи.

Създаден е да работи на множество процесори или графични процесори и дори мобилни операционни системи и има няколко обвивки на няколко езика като Python, C++ or Java.

История на TensorFlow

Преди няколко години дълбокото обучение започна да превъзхожда всички други алгоритми за машинно обучение, когато дава огромно количество данни. Google видя, че може да използва тези дълбоки невронни мрежи, за да подобри своите услуги:

  • Gmail
  • Снимки
  • Търсачката на Google

Те изграждат рамка, наречена Тензорен поток за да позволи на изследователите и разработчиците да работят заедно върху AI модел. Веднъж разработен и мащабиран, той позволява на много хора да го използват.

За първи път беше публикуван в края на 2015 г., докато първата стабилна версия се появи през 2017 г. Той е с отворен код под лиценз Apache Open Source. Можете да го използвате, модифицирате и разпространявате отново модифицираната версия срещу заплащане, без да плащате нищо на Google.

След това в този урок за задълбочено обучение на TensorFlow ще научим за архитектурата на TensorFlow и как работи TensorFlow.

Как работи TensorFlow

TensorFlow ви позволява да изграждате графики и структури на потоци от данни, за да определите как данните се движат през графика, като приема входове като многоизмерен масив, наречен Tensor. Тя ви позволява да конструирате блок-схема на операциите, които могат да бъдат извършени върху тези входове, която отива в единия край и идва в другия край като изход.

TensorFlow Archiтекстура

Архитектурата на Tensorflow работи в три части:

  • Предварителна обработка на данните
  • Изградете модела
  • Обучете и преценете модела

Нарича се Tensorflow, защото приема входни данни като многоизмерен масив, известен също като тензори. Можете да конструирате нещо като диаграма от операции (наречени графика), които искате да изпълните върху този вход. Входът влиза в единия край и след това преминава през тази система от множество операции и излиза от другия край като изход.

Ето защо се нарича TensorFlow, защото тензорът влиза, преминава през списък от операции и след това излиза от другата страна.

Къде може да работи Tensorflow?

TensorFlow хардуер и софтуерни изисквания могат да бъдат класифицирани в

Фаза на развитие: Това е, когато тренирате режима. Обучението обикновено се извършва на вашия настолен компютър или лаптоп.

Фаза на изпълнение или фаза на извод: След като обучението приключи, Tensorflow може да се изпълнява на много различни платформи. Можете да го стартирате

  • Работен работен плот Windows, macOS или Linux
  • Облакът като уеб услуга
  • Мобилни устройства като iOS и Android

Можете да го обучите на множество машини, след което можете да го стартирате на различна машина, след като имате обучения модел.

Моделът може да бъде обучен и използван както на GPU, така и на CPU. Първоначално графичните процесори са предназначени за видео игри. В края на 2010 г. изследователи от Станфорд откриха, че GPU също е много добър в матричните операции и алгебрата, така че ги прави много бързи за извършване на този вид изчисления. Дълбокото обучение разчита на много умножение на матрици. TensorFlow е много бърз при изчисляването на матричното умножение, защото е записано C++. Въпреки че се прилага в C++, TensorFlow може да бъде достъпен и контролиран главно от други езици, Python.

И накрая, важна характеристика на TensorFlow е TensorBoard. The TensorBoard позволява да се наблюдава графично и визуално какво прави TensorFlow.

Компоненти на TensorFlow

Тензор

Името на Tensorflow произлиза директно от неговата основна рамка: Тензор. В Tensorflow всички изчисления включват тензори. Тензор е a вектор or матрица от n-измерения, който представлява всички типове данни. Всички стойности в тензор съдържат идентичен тип данни с известен (или частично известен) оформянето. Формата на данните е размерността на матрицата или масива.

Тензорът може да произхожда от входните данни или резултат от изчисление. В TensorFlow всички операции се извършват вътре в a крива. Графиката е набор от изчисления, които се извършват последователно. Всяка операция се нарича an оп възел и са свързани помежду си.

Графиката очертава операциите и връзките между възлите. Въпреки това не показва стойностите. Ръбът на възлите е тензорът, т.е. начин за попълване на операцията с данни.

Графики

TensorFlow използва графична рамка. Графиката събира и описва всички серии изчисления, направени по време на обучението. Графиката има много предимства:

  • Беше направено, за да работи на множество процесори или графични процесори и дори мобилна операционна система
  • Преносимостта на графиката позволява да се запазят изчисленията за незабавна или по-късна употреба. Графиката може да бъде запазена, за да бъде изпълнена в бъдеще.
  • Всички изчисления в графиката се извършват чрез свързване на тензори заедно
    • Тензорът има възел и ръб. Възелът извършва математическата операция и произвежда крайни точки. Ръбовете, ръбовете обясняват връзките вход/изход между възлите.

Защо TensorFlow е популярен?

TensorFlow е най-добрата библиотека от всички, защото е създадена да бъде достъпна за всички. Библиотеката на Tensorflow включва различен API за изградена в мащаб архитектура за дълбоко обучение като CNN или RNN. TensorFlow се основава на изчисляване на графики; позволява на разработчика да визуализира конструкцията на невронната мрежа с Tensorboad. Този инструмент е полезен за отстраняване на грешки в програмата. И накрая, Tensorflow е създаден да бъде разгърнат в мащаб. Работи на CPU и GPU.

Tensorflow привлича най-голяма популярност в GitHub в сравнение с другата рамка за дълбоко обучение.

TensorFlow Algorithms

По-долу са алгоритмите, поддържани от TensorFlow:

В момента TensorFlow 1.10 има вграден API за:

  • Линейна регресия: tf.estimator.LinearRegressor
  • Класификация:tf.estimator.LinearClassifier
  • Класификация за дълбоко обучение: tf.estimator.DNNClassifier
  • Изтриване на дълбоко обучение и дълбоко: tf.estimator.DNNLinearCombinedClassifier
  • Регресия на бустер дърво: tf.estimator.BoostedTreesRegressor
  • Подсилена класификация на дървото: tf.estimator.BoostedTreesClassifier

Как работят изчисленията в TensorFlow

import numpy as np
import tensorflow as tf

В първите два реда код ние импортирахме tensorflow като tf. с Python, честа практика е да се използва кратко име за библиотека. Предимството е да избягваме да въвеждаме пълното име на библиотеката, когато трябва да я използваме. Например, можем да импортираме tensorflow като tf и да извикаме tf, когато искаме да използваме функция tensorflow

Нека практикуваме елементарния работен процес на Tensorflow с прости примери за TensorFlow. Нека създадем изчислителна графика, която умножава две числа заедно.

По време на примера ще умножим X_1 и X_2 заедно. Tensorflow ще създаде възел за свързване на операцията. В нашия пример се нарича умножение. Когато графиката бъде определена, изчислителните машини на Tensorflow ще умножат заедно X_1 и X_2.

Изчисленията работят в TensorFlow
Пример за TensorFlow

Накрая ще стартираме сесия TensorFlow, която ще изпълни изчислителната графика със стойностите на X_1 и X_2 и ще отпечата резултата от умножението.

Нека дефинираме входните възли X_1 и X_2. Когато създаваме възел в Tensorflow, трябва да изберем какъв вид възел да създадем. Възлите X1 и X2 ще бъдат заместващ възел. Заместителят присвоява нова стойност всеки път, когато правим изчисление. Ще ги създадем като възел за контейнер на TF точка.

Стъпка 1: Дефинирайте променливата

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

Когато създаваме заместващ възел, трябва да предадем типа данни, който ще добавя числа тук, за да можем да използваме тип данни с плаваща запетая, нека използваме tf.float32. Трябва също така да дадем име на този възел. Това име ще се появи, когато разгледаме графичните визуализации на нашия модел. Нека наименуваме този възел X_1, като предадем параметър, наречен име със стойност X_1 и сега нека дефинираме X_2 по същия начин. X_2.

Стъпка 2: Дефинирайте изчислението

multiply = tf.multiply(X_1, X_2, name = "multiply")

Сега можем да дефинираме възела, който извършва операцията умножение. В Tensorflow можем да направим това, като създадем tf.multiply възел.

Ще предадем възлите X_1 и X_2 към възела за умножение. Той казва на tensorflow да свърже тези възли в изчислителната графика, така че ние го молим да изтегли стойностите от x и y и да умножи резултата. Нека също така да дадем на възела за умножение името multiply. Това е цялата дефиниция за нашата проста изчислителна графика.

Стъпка 3: Изпълнете операцията

За да изпълним операции в графиката, трябва да създадем сесия. В Tensorflow това се прави от tf.Session(). Сега, когато имаме сесия, можем да поискаме от сесията да изпълнява операции върху нашата изчислителна графика, като извикаме сесия. За да стартираме изчислението, трябва да използваме run.

Когато се изпълнява операцията по добавяне, ще се види, че трябва да вземе стойностите на възлите X_1 и X_2, така че ние също трябва да подадем стойности за X_1 и X_2. Можем да направим това, като предоставим параметър, наречен feed_dict. Предаваме стойността 1,2,3 за X_1 и 4,5,6 за X_2.

Отпечатваме резултатите с print(result). Трябва да видим 4, 10 и 18 за 1×4, 2×5 и 3×6

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

Опции за зареждане на данни в TensorFlow

Първа стъпка преди тренировка a алгоритъм за машинно обучение е да заредите данните. Има два често срещани начина за зареждане на данни:

1. Заредете данни в паметта: Това е най-простият метод. Вие зареждате всичките си данни в паметта като единичен масив. Можете да напишете a Python код. Тези редове код не са свързани с Tensorflow.

2. Tensorflow тръбопровод за данни: Tensorflow има вграден API, който ви помага лесно да заредите данните, да извършите операцията и да захранвате алгоритъма за машинно обучение. Този метод работи много добре, особено когато имате голям набор от данни. Известно е например, че записите на изображения са огромни и не се побират в паметта. Тръбопроводът за данни управлява паметта сам

Какво решение да използвам?

Заредете данни в паметта

Ако вашият набор от данни не е твърде голям, т.е. по-малък от 10 гигабайта, можете да използвате първия метод. Данните могат да се поберат в паметта. Можете да използвате известна библиотека, наречена Pandas, за да импортирате CSV файлове. Ще научите повече за пандите в следващия урок.

Заредете данни с Tensorflow pipeline

Вторият метод работи най-добре, ако имате голям набор от данни. Например, ако имате набор от данни от 50 гигабайта, а компютърът ви има само 16 гигабайта памет, тогава машината ще се срине.

В тази ситуация трябва да изградите тръбопровод Tensorflow. Тръбопроводът ще зареди данните на партида или малка част. Всяка партида ще бъде изтласкана към тръбопровода и ще бъде готова за обучението. Изграждането на тръбопровод е отлично решение, защото ви позволява да използвате паралелни изчисления. Това означава, че Tensorflow ще обучи модела в множество процесори. Той насърчава изчисленията и дава възможност за обучение на мощна невронна мрежа.

В следващите уроци ще видите как да изградите значителен тръбопровод, който да захранва вашата невронна мрежа.

С две думи, ако имате малък набор от данни, можете да заредите данните в паметта с библиотеката Pandas.

Ако имате голям набор от данни и искате да използвате множество процесори, тогава ще ви бъде по-удобно да работите с Tensorflow pipeline.

Как да създадете TensorFlow тръбопровод

Ето стъпките за създаване на тръбопровод TensorFlow:

В предишния пример ръчно добавихме три стойности за X_1 и X_2. Сега ще видим как да зареждаме данни в Tensorflow:

Стъпка 1) Създайте данните

Първо, нека използваме библиотеката numpy, за да генерираме две произволни стойности.

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

Стъпка 2) Създайте контейнера

Както в предишния пример, създаваме контейнер с името X. Трябва изрично да посочим формата на тензора. В този случай ще заредим масив само с две стойности. Можем да напишем формата като shape=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Стъпка 3) Дефинирайте метода на набора от данни

След това трябва да дефинираме набора от данни, където можем да попълним стойността на контейнера x. Трябва да използваме метода tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

Стъпка 4) Създайте тръбопровода

В четвърта стъпка трябва да инициализираме тръбопровода, където ще текат данните. Трябва да създадем итератор с make_initializable_iterator. Ние го наричаме итератор. След това трябва да извикаме този итератор, за да захраним следващата партида данни, get_next. Наричаме тази стъпка get_next. Обърнете внимание, че в нашия пример има само една група от данни само с две стойности.

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

Стъпка 5) Изпълнете операцията

Последната стъпка е подобна на предишния пример. Инициираме сесия и изпълняваме итератора на операцията. Захранваме feed_dict със стойността, генерирана от буца. Тези две стойности ще попълнят заместителя x. След това стартираме get_next, за да отпечатаме резултата.

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

Oбобщение

  • Значение на TensorFlow: TensorFlow е най-известната библиотека за дълбоко обучение през последните години. Практик, използващ TensorFlow, може да изгради всяка структура за дълбоко обучение, като CNN, RNN или проста изкуствена невронна мрежа.
  • TensorFlow се използва най-вече от академици, стартиращи фирми и големи компании. Google използва TensorFlow в почти всички ежедневни продукти на Google, включително Gmail, Photo и Google Search Engine.
  • Екипът на Google Brain разработи TensorFlow, за да запълни празнината между изследователи и разработчици на продукти. През 2015 г. те направиха TensorFlow публичен; популярността му нараства бързо. В днешно време TensorFlow е библиотеката за дълбоко обучение с най-много хранилища в GitHub.
  • Практиците използват Tensorflow, защото е лесен за внедряване в мащаб. Създаден е да работи в облака или на мобилни устройства като iOs и Android.

Tensorflow работи в сесия. Всяка сесия се определя от графика с различни изчисления. Прост пример може да бъде умножаване на число. В Tensorflow са необходими три стъпки:

  1. Дефинирайте променливата
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Дефинирайте изчислението
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Изпълнете операцията
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Една често срещана практика в Tensorflow е да се създаде тръбопровод за зареждане на данните. Ако следвате тези пет стъпки, ще можете да заредите данни в TensorFLow:

  1. Създайте данните
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Създайте контейнера
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Дефинирайте метода на набора от данни
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Създайте тръбопровода
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Изпълнете програмата
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))