Это руководство по TensorFlow предназначено для тех, кто имеет базовые представления о машинном обучении и пытается начать работу с TensorFlow. Вам потребуется установить TensorFlow. Вы можете следовать этому руководству, чтобы установить TensorFlow. Это руководство по тензорному потоку разделено на две части; в первой части мы объясняем основы на примере; во второй части мы строим модель линейной регрессии.

TensorFlow - это библиотека для численных вычислений, в которой данные проходят через граф. Данные в TensorFlow представлены n-мерными массивами, называемыми тензорами. График состоит из данных (тензоров) и математических операций.

  • Узлы на графике: представляют математические операции.
  • Ребра на графике: представляют тензоры, которые текут между операциями.

Есть еще один аспект, в котором TensorFlow сильно отличается от любого другого языка программирования. В TensorFlow вам сначала нужно создать план того, что вы хотите создать. Пока вы создаете график, переменные не имеют никакого значения. Позже, когда вы создадите полный график, вам нужно будет запустить его внутри сеанса, только тогда переменные будут иметь какие-либо значения . Подробнее об этом позже.

Давайте начнем учиться на практике. Запустите python и импортируйте тензорный поток:

sankit@sankit:~$ python
>>> Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type “help”, “copyright”, “credits” or “license” for more information.
>>> import tensorflow as tf

(i) График в TensorFlow:

Граф является основой TensorFlow, и каждое вычисление / операция / переменные находятся на нем. Все, что происходит в коде, находится на графике по умолчанию, предоставляемом TensorFlow. Вы можете получить доступ к этому графику:

graph = tf.get_default_graph()

Вы можете получить список всех операций, набрав:

graph.get_operations() 

В настоящее время выходные данные пусты, как показано [], так как на графике ничего нет.

Если вы хотите распечатать название операций на графике, сделайте следующее:

for op in graph.get_operations():
    print(op.name)

Это снова будет пусто. Мы будем использовать это для вывода имен операций после того, как добавим операции в граф. Кроме того, можно создать несколько графиков. Но давайте поговорим об этом позже.

(ii) Сессия TensorFlow:

Граф используется для определения операций, но операции выполняются только в рамках сеанса. Графики и сеансы создаются независимо друг от друга. Вы можете представить себе график, похожий на план, а сеанс - на строительную площадку.

График только определяет вычисления или строит план. Однако здесь нет ни переменных, ни значений, если только мы не запустим график или его часть в рамках сеанса.

Вы можете создать такой сеанс:

sess=tf.Session() 
.....
your code 
your code
.....
sess.close()

Каждый раз, когда вы открываете сеанс, вы должны не забывать его закрыть. Или вы можете использовать "with block", как это.

with tf.Session() as sess:
    sess.run(f)

Преимущество блока with: сессия закрывается автоматически в конце блока with. Мы используем with block в большей части нашего кода и рекомендуем вам сделать это тоже.

iii). Тензоры в TensorFlow

TF хранит данные в тензорах, которые похожи на многомерные массивы numPy (хотя они и отличаются от массивов numPy):

а) Константы:

- константы, значение которых нельзя изменить. Вы можете объявить константу следующим образом:

a=tf.constant(1.0) 
a 
<tf.Tensor’Const:0' shape=() dtype=float32> 
print(a) 
Tensor(“Const:0”, shape=(), dtype=float32)

Как видите, это отличается от других языков программирования, таких как python, вы не можете распечатать / получить доступ к константе a, если не запустите ее внутри сеанса. Давай сделаем это:

with tf.Session() as sess: 
    print(sess.run(a))

На выходе будет 1.0.

б) Переменные:

снова являются тензорами, которые подобны переменным в любом другом языке.

>>>b = tf.Variable(2.0,name=”test_var”) 
>>>b 
<tensorflow.python.ops.variables.Variable object at 0x7f37ebda1990>

Переменные (как можно догадаться по названию) могут содержать разные значения, а не константы. Однако они должны быть отдельно инициализированы операцией инициализации. Инициализировать все переменные по отдельности может быть утомительно. Однако TensorFlow предоставляет механизм для инициализации всех переменных за один раз. Посмотрим, как это сделать:

Используйте global_variables_initializer () для tf версии 0.12 и новее.

>>>init_op = tf.global_variables_initializer()

Это добавит init_op к нашему графику тензорного потока по умолчанию.

Теперь запустите этот init_op, прежде чем пытаться получить доступ к своей переменной:

with tf.Session() as sess:
    sess.run(init_op) 
    print(sess.run(b))

Это выведет 2.0

Теперь попробуйте распечатать операции на графике:

graph = tf.get_default_graph() 
for op in graph.get_operations():
    print(op.name)

Теперь это выведет:

Const 
test_var/initial_value
test_var
test_var/Assign
test_var/read
init

Как видите, мы объявили ‘a’ как Const, поэтому он был добавлен на график. Точно так же для переменной b многие состояния test_var были добавлены в граф TensorFlow, например test_var / initial_value, test_var / read и т. Д. Вы можете визуализировать всю сеть с помощью TensorBoard, который представляет собой инструмент для визуализации графика TensorFlow и процесса обучения. .

в) Заполнители:

- это тензоры, ожидающие инициализации / подачи. Заполнители используются для обучающих данных, которые вводятся только тогда, когда код действительно выполняется внутри сеанса. То, что передается в Placeholder, называется feed_dict. Feed_dict - это пары ключ-значение для хранения данных:

>>>a = tf.placeholder(“float”)
>>>b = tf.placeholder(“float”) 
>>>y = tf.multiply(a, b) 
//Typically we load feed_dict from somewhere else, 
//may be reading from a training data folder. etc 
//For simplicity, we have put values in feed_dict here 
>>>feed_dict ={a:2,b:3} 
>>>with tf.Session() as sess:
    print(sess.run(y,feed_dict))

На выходе будет 6.

iv) Устройство в TensorFlow:

TensorFlow имеет очень сильные встроенные возможности для запуска вашего кода на графическом процессоре, процессоре или кластере графических процессоров и т. Д. Он предоставляет вам варианты выбора устройства, на котором вы хотите запустить свой код. Однако это не то, о чем вам нужно беспокоиться, когда вы только начинаете. Позже мы напишем об этом отдельное руководство. Итак, вот полная картина:

Часть 2: Учебник по Tensorflow с простым примером:

В этой части мы рассмотрим код для запуска линейной регрессии. Перед этим давайте посмотрим на некоторые из основных функций TensorFlow, которые мы будем использовать в коде.

Создайте случайное нормальное распределение:

Используйте random_normal для создания случайных значений из нормального распределения. В этом примере w - это переменная размером 784 * 10 со случайными значениями со стандартным отклонением 0,01.

w=tf.Variable(tf.random_normal([784, 10], stddev=0.01))

Reduce_mean:

вычисляет среднее значение массива .

b = tf.Variable([10,20,30,40,50,60],name=’t’) 
with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    sess.run(tf.reduce_mean(b))

ArgMax:

Очень похоже на python argmax. Получает максимальное значение от тензора по указанной оси.

a=[ [0.1, 0.2, 0.3 ], [20, 2, 3 ] ] 
b = tf.Variable(a,name=’b’) 
with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())    
    sess.run(tf.argmax(b,1))

Выход: массив ([2, 0]), который показывает индекс максимального значения в каждой строке a.

Упражнение по линейной регрессии:

Постановка проблемы: при линейной регрессии вы получаете множество точек данных и пытаетесь уместить их на прямой линии. В этом примере мы создадим 100 точек данных и попытаемся уместить их в линию.

а) Создание обучающих данных:

trainX имеет значения от -1 до 1, а trainY имеет в 3 раза больше trainX и некоторую случайность.

import tensorflow as tf
import numpy as np 
trainX = np.linspace(-1, 1, 101) 
trainY = 3 * trainX + np.random.randn(*trainX.shape) * 0.33

б) Заполнители:

X = tf.placeholder(“float”) 
Y = tf.placeholder(“float”)

в) Моделирование:

Модель линейной регрессии y_model = w * x, и мы должны вычислить значение w с помощью нашей модели. Давайте инициализируем w равным 0 и создадим модель для решения этой проблемы. Мы определяем стоимость как квадрат (Y-y_model). TensorFlow поставляется со многими оптимизаторами, которые вычисляют и обновляют градиенты после каждой итерации, пытаясь минимизировать указанные затраты. Мы собираемся определить операцию обучения как изменение значений с помощью GradientDescentOptimizer, чтобы минимизировать затраты со скоростью обучения 0,01. Позже мы запустим эту обучающую операцию в цикле.

w = tf.Variable(0.0, name=”weights”) 
y_model = tf.multiply(X, w) 
cost = (tf.pow(Y-y_model, 2)) 
train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

г) Обучение:

До этого момента мы только определили график. Никаких вычислений не произошло.

Ни одна из переменных TensorFlow не имеет значения. Чтобы запустить этот график, нам нужно создать сеанс и запустить его. Перед этим нам нужно создать init_op для инициализации всех переменных:

init= tf.global_variables_initializer() 
with tf.Session() as sess: 
    sess.run(init) 
    for i in range(100):
        for (x, y) in zip(trainX, trainY):
            sess.run(train_op, feed_dict={X: x, Y: y})   
    print(sess.run(w))

Обратите внимание, что первое, что было сделано, - это инициализировать переменные, вызвав init внутри session.run (). Позже мы запускаем train_op, загружая feed_dict. Наконец, мы печатаем значение w (опять же внутри sessions.run (), которое должно быть около 3.

д) упражнения:

Если вы создадите новый блок сеанса после этого кода и попытаетесь вывести w, что будет на выходе?

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(w))

да, вы все правильно поняли, будет 0,0. В этом идея символических вычислений. Как только мы вышли из созданного ранее сеанса, все операции перестают существовать.

Надеюсь, это руководство даст вам хорошее начало работы с TensorFlow. Не стесняйтесь задавать свои вопросы в комментариях. Полный код можно скачать здесь.

Вы можете продолжить изучение Tensorflow во втором туториале здесь.

Первоначально опубликовано на cv-tricks.com 8 февраля 2017 г.