Установка TensorFlow в вашей локальной среде разработки не представляет особой проблемы, если вы не планируете вносить изменения в исходный код TensorFlow. Воспользуйтесь менеджером установки на Python под названием Pip. Если он еще не установлен на вашем компьютере, используйте следующие команды ввода:
# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev
# Mac OS X
$ sudo easy_install pip
Установив Pip (версия 8.1 или новее), примените следующие команды для установки TensorFlow. Отметим разницу в именовании пакетов Pip, если мы хотим загрузить версию TensorFlow для графических процессоров (настоятельно советуем так и поступить):
$ pip install — upgrade tensorflow # for Python 2.7
$ pip3 install — upgrade tensorflow # for Python 3.n
$ pip install — upgrade tensorflow-gpu # for Python 2.7
# and GPU
$ pip3 install — upgrade tensorflow-gpu # for Python 3.n
# and GPU
Дополненные обновленные инструкции и подробности по поводу установки приложения можно найти на сайте TensorFlow [20].
Создание переменных TensorFlow и работа с ними
Создавая модель глубокого обучения в TensorFlow, мы используем переменные для представления параметров модели. Переменные TensorFlow — буферы в оперативной памяти, содержащие тензоры. Однако, в отличие от нормальных тензоров, которые создаются только при запуске графа и затем тут же стираются из памяти, переменные переживают несколько выполнений графа. Поэтому они обладают следующими тремя свойствами.
• Переменные должны быть явно инициализированы до того, как граф будет использован впервые.
• Можно использовать градиентные методы модификации переменных после каждой итерации, ведь мы ищем оптимальные параметры модели.
• Значения, хранимые в переменных, можно скопировать на диск и восстанавливать для дальнейшего использования.
Эти три свойства делают TensorFlow особенно полезным инструментом в разработке моделей машинного обучения.
Создание переменных — процесс несложный, и в TensorFlow можно инициализировать их несколькими способами. Начнем с переменной, которая описывает веса, соединяющие нейроны двух слоев сети с прямым распространением сигнала:
weights = tf.Variable(tf.random_normal([300, 200], stddev=0.5), name="weights")
Здесь мы сообщаем tf.Variable два аргумента [21]. Первый — tf.random_normal — операция, которая создает тензор, инициализированный при помощи нормального распределения со стандартным отклонением 0,5 [22]. Мы указали размер тензора — 300×200, подразумевая, что веса соединяют слой из 300 нейронов со слоем из 200 нейронов. Мы задали имя обращения к tf.Variable. Это уникальный идентификатор, который позволяет обращаться к соответствующему узлу в графе вычислений. В этом случае веса считаются обучаемыми; мы будем автоматически вычислять градиенты и применять их к весам. Если они не должны быть обучаемыми, мы можем установить дополнительный флаг при обращении к tf.Variable:
weights = tf.Variable(tf.random_normal([300, 200], stddev=0.5), name="weights", trainable=False)
Помимо tf.random_normal, есть еще несколько методов инициализации переменной TensorFlow:
# Common tensors from the TensorFlow API docs
tf.zeros(shape, dtype=tf.float32, name=None)
tf.ones(shape, dtype=tf.float32, name=None)
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None name=None)
tf.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None)
При обращении к tf.Variable к графу вычислений добавляются три операции:
• операция, создающая тензор для инициализации переменной;
• операция tf.assign, которая наполняет переменную инициализирующим тензором до ее использования;
• операция переменной, которая содержит ее текущее значение.
Визуализация приведена на рис. 3.1.
Рис. 3.1. Три операции добавляются при реализации переменной TensorFlow. Здесь мы инициализируем переменные веса при помощи нормального распределения
Как мы уже говорили, прежде чем использовать переменную TensorFlow, нужно запустить операцию tf.assign [23], чтобы переменной было присвоено желаемое начальное значение. Для этого можно запустить tf.initialize_all_variables() [24], что приведет к выполнению всех операций tf.assign в нашем графе. Мы можем также выборочно инициализировать некоторые переменные графа вычислений командой tf.initialize_variables(var1, var2, …) [25]. Подробнее обо всем этом мы поговорим при обсуждении сессий TensorFlow.
Мы уже упомянули о некоторых операциях в контексте инициализации переменных, но в TensorFlow доступны и многие другие. Они выражают абстрактные трансформации, которые применяются к тензорам в графе вычислений. Операции могут иметь атрибуты, которые либо заданы изначально, либо вводятся в процессе работы. Например, атрибут может описывать ожидаемые типы входных данных (добавление тензоров типа float32 или int32). Операциям, как и переменным, может присваиваться имя для простоты обращения на графе вычислений. Они состоят из одного или более ядер, которые содержат специфичные для устройств реализации.
Читать дальше
Конец ознакомительного отрывка
Купить книгу