Хабрахабр

[Из песочницы] Учебное пособие по TensorFlow: 10 минутное практическое занятие по TensorFlow для начинающих [перевод]

Представляю вашему вниманию перевод статьи "TensorFlow Tutorial: 10 minutes Practical TensorFlow lesson for quick learners" автора Ankit Sachan. Привет, Хабр!

Этот туториал по TensorFlow предназначен для тех, кто имеет общее представление о машинном обучении и пытается начать работу с TensorFlow.

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

Часть 1. Основы TensorFlow

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

В узлах графа находятся математические операции.

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

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

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

~$ 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

Графы и сессии создаются независимо друг от друга. Для определения операций используется граф, при этом все операции выполняются в сессии. Относитесь к графу как к проекту строительства, а к сессии как к строительной площадке.

1.1. Графы в TensorFlow

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

graph = tf.get_default_graph()

А так вы можете получить список всех операций в этом графе:

graph.get_operations()

Если вам необходимо напечатать название каждой операции выполните следующий код: Сейчас ваш граф пуст.

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

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

1.2. Сессии в TensorFlow

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

Вы можете создать сессию так:

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

Не забывайте, что начав сессию вам необходимо ее завершить или использовать блок with… as, например вот так:

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

Плюсом использования такого подхода является то что сессия будет закрыта автоматически в конце блока with

1.3. Тензоры в TensorFlow

TensorFlow хранит данные в тензорах — многомерных массивах очень похожих на массивы numPy.

Они определяются так: a) Константы — это значения которые не могут быть изменены.

a=tf.constant(1.0)

при этом при попытке вывода вы получите следующее:

print(a)
<tf.Tensor'Const:0' shape=() dtype=float32> print(a)
Tensor("Const:0", shape=(), dtype=float32)

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

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

Этот код выведет 1.

b) Переменные это тоже тензоры которые походи на переменные в других языках программирования:

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

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

init_op = tf.global_variables_initializer()

Теперь необходимо запустить операцию инициализации до того как вы попытаетесь получить доступ к переменной:

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

0
Если вы теперь попробуете распечатать операции в графе Этот код выведет 2.

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

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

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

a = tf.placeholder("float")
b = tf.placeholder("float")
y = tf.multiply(a, b)
fd =
with tf.Session() as sess: print(sess.run(y, fd))

Данный код выведет 6.

1.4. Устройства в TensorFlow

Он предоставляет вам возможность выбрать устройство, на котором вы хотите запускать ваш код. TensorFlow имеет очень мощные встроенные возможности для запуска вашего кода на GPU, CPU или кластерах. Однако, это не то о чем стоит задумываться когда вы только начинаете знакомство с TF.
Итак вот полная картина того, как устроены вычисления в TensorFlow:
image

Часть 2. Туториал по TensorFlow с простым примером

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

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

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

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))

Данный код выведет 35

Получает максимальное значение из тензора вдоль указанной оси. argmax — очень похож на argmax в Python.

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 точек данных и попытаемся поставить им в соответствие линию. Постановка задачи: имеется большое количество точек данных, пытаетесь им в соответствие прямую линию.

2.1. Создание тренировочного набора данных

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

2.2. Плейсхолдеры

X = tf.placeholder("float")
Y = tf.placeholder("float")

2.3. Моделирование

Модель линейной регрессии имеет вид

$$display$$Ymodel = w * x$$display$$

— мы должны вычислить значение w. Давайте инициализируем w нулевым значением и создадим модель для решения этой проблемы. Мы определяем функцию стоимость как

$$display$$ (Y-y__model)^2$$display$$

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)

2.4. Обучение

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

init = tf.initialize_all_variables() 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))

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

Упражнение:

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

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

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»