Эта статья представляет собой запись заметок новичка в TensorFlow, которая представляет собой краткое изложение личного опыта и предназначена только для справки.
Введение
Некоторые изучают искусственный интеллект и делают приложения в направлении глубокого обучения с подкреплением. Потому что подходящего фундамента нет, а многие проекты на GitHub в основном основаны на TensorFlow, так что изучайте его. Библиография: «TensorFlow в действии Google Deep Learning Framework» (второе издание).
2. Введение в TensorFlow
TensorFlow — один из основных современных инструментов разработки искусственного интеллекта. Это вычислительная среда, официально открытая Google 9 ноября 2015 года. Она основана на команде Google Brain под руководством Джеффа Дина на основе системы глубокого обучения Google первого поколения DistBelief. Вычислительная среда имеет высокую степень применимости и практичности в GitHub и отрасли.
3. Начало работы с TensorFlow
Вычислительный графЭто самая основная концепция в TensorFlow и вычислительной модели TensorFlow.Все вычисления в TensorFlow преобразуются в узлы на графе вычислений, а ребра между узлами описывают зависимости между вычислениями.
Тензор(тензор) — это базовая модель данных TensorFlow. Название TensorFlow уже объясняет две его самые важные концепции — Tensor и Flow. Тензор — это тензор, мы можем понимать его как многомерный массив, тензор нулевого порядка представляет собой скаляр, который является числом; тензор первого порядка — это вектор, который представляет собой одномерный массив; тензор порядка Величину можно понимать как n-мерный массив. Поток в переводе на китайский язык — это «поток», который интуитивно выражает процесс взаимного преобразования между тензорами посредством вычислений. Реализация тензоров в TensorFlow осуществляется не напрямую в виде массивов.Это просто ссылка на результат операции в TensorFlow.
import tensorflow as tf
# TensorFlow使用时非常常用的技巧,即用tf代指tensorflow。
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = tf.add(a, b, name="add")
print result
'''
输出:
Tensor("add:0", shape=(2,), dtype=float32)
'''
Как видно из приведенного выше кода, результатом вычисления TensorFlow является не конкретное число, а тензорная структура, которая сохраняет три атрибута: имя (name), размерность (shape) и тип (type).add:0
Он показывает, что тензорный результат — это первый результат, выдаваемый вычислительным узлом «aad» (число начинается с 0),shape=(2,)
Он показывает, что результатом тензора является одномерный массив длиной 2.dtype=float32
Указывает тип данных его значения.
Как показано на рисунке выше, узел добавления — это узел графа вычислений, который зависит от считывания значений двух констант, а результат используется в качестве ссылки на результат вычисления добавления, который является базовым вычислением. модель TensorFlow.
TensorFlow должен обращать внимание на спецификацию типов данных и размерностей данных при определении тензоров и вычислений.Взаимно вычисляться могут только данные одного типа данных и подходящих размерностей. TensorFlow поддерживает 14 различных типов, в основном включая вещественные числа (tf.float32, tf.float64), целые числа (tf.int8, tf.int16, tf.int32, tf.int64, tf.uint8), логические значения (tf.bool) и комплексные числа (tf.complex64, tf.complex128).
беседа(сеанс) — это рабочая модель TensorFlow. После того, как вычисление в TensorFlow определено, его необходимо выполнить с использованием сеанса.
# 创建一个会话。
sess = tf.Session()
# 使用这个创建好的会话来计算关心的结果。比如可以调用sess.run(result),
# 来得到执行定义的result的取值。
sess.run(...)
# 关闭对话框使得本次运行中使用到的资源可以被释放。
sess.close()
4. TensorFlow реализует нейронную сеть
Блок-схема нейронной сети на основе алгоритма обратного распространения выглядит следующим образом:
Действуйте следующим образом:
- Определить сетевую структуру нейронной сети и выход прямого распространения;
- Определить функцию потерь и выбрать алгоритм оптимизации обратного распространения;
- Создается сеанс (tf.Session), и алгоритм оптимизации обратного распространения итеративно запускается на обучающих данных.
Пример реализации:
import tensorflow as tf
from numpy.random import RandomState
# 定义训练数据batch的大小
batch_size = 8
# 定义两层网络结构
w1 = tf.Variable(tf.random_normal((2, 3), stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal((3, 1), stddev=1, seed=1))
# placeholder函数预留输入空间
x = tf.placeholder(tf.float32, shape=(None, 2), name="x-input")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y-input")
# 定义网络之间的连接方式
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
# 定义损失函数与反向传播算法
y = tf.sigmoid(y)
cross_entropy = -tf.reduce_mean(
y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))
+ (1-y_) * tf.log(tf.clip_by_value(1-y, 1e-10, 1.0))
)
tran_step = tf.train.AdadeltaOptimizer(0.01).minimize(cross_entropy)
# 通过随机数生成一个模拟数据集
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size, 2)
# 定义模拟标签规则
Y = [[int(x1 + x2 < 1)] for (x1, x2) in X]
# 创建一个会话来运行TensorFlow程序
sess = tf.Session()
init_op = tf.global_variables_initializer()
sess.run(init_op)
# 打印训练之前的参数
print(sess.run(w1))
print(sess.run(w2))
# 定义轮数和数据选取方并进行训练
STEPS = 50000
for i in range(STEPS):
start = (i * batch_size) % dataset_size
end = min(start + batch_size, dataset_size)
sess.run(tran_step, feed_dict={x: X[start:end], y_: Y[start:end]})
# 每10000轮打印一次神经网络在总的数据集上的损失函数
if i % 10000 == 0:
total_cross_entropy = sess.run(
cross_entropy, feed_dict={x: X, y_: Y}
)
print(i)
print(total_cross_entropy)
# 打印训练之后的参数
print(sess.run(w1))
print(sess.run(w2))
sess.close()
Глубокий анализ нейронной сети:
- Обычно используемые функции активации:
tf.nn.relu
,tf.sigmoid
,tf.tanh
; - Кросс-энтропийная реализация:
cross_entropy = -tf.reduce_mean( y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
; - MSE:
tf.reduce_mean(tf.square(y_ - y))
; - Общие алгоритмы оптимизации:
tf.train.GradientDescentOptimizer(learning_rate).minmize(loss_fuction)
,tf.train.AdamOptimizer
,tf.train.MomentumOptimizer
; - Метод снижения скорости обучения:
tf.train.exponential_decay
; - Формула регуляризации:
tf.contrib.layers.l1_regularizer(lambda)(w)
,tf.contrib.layers.l2_regularizer(lambda)(w)
; - Метод реализации модели скользящего среднего:
tf.trian.ExponentialMovingAverage(decay, num_updates)
;
Пять, резюме обучения
В целом, TensorFlow достаточно прост в использовании, и он не так плох, как ходят слухи. Я пропустил этапы загрузки TensorFlow и настройки окружения, потому что эта часть очень громоздкая и совместимость между разными версиями плохая Конкретное решение проблемы найдено в интернете, и на него не стоит ссылаться.
Основная концепция TensorFlow очень нова, с вычислением в качестве оси, а не данными в качестве оси, что полностью отражает важность вычислений для искусственного интеллекта и обеспечивает новые перспективы и перспективы для построения нейронных сетей и реализации алгоритмов. Что касается части сравнения, я не использовал PyTorch или другие инструменты сборки, поэтому я не буду делать оценку.
С нетерпением жду следующего шага, чтобы начать проектную практику.
(Спасибо за прочтение, поправьте меня, если я ошибаюсь.)