Заметки о начале работы с Tensorflow

искусственный интеллект TensorFlow

Принцип тензорного потока

задний план:Переключение между Python и C++ требует огромных накладных расходов.

To do efficient numerical computing in Python, we typically use libraries like NumPythat do expensive operations such as matrix multiplication outside Python, using highly efficient code implemented in another language. Unfortunately, there can still be a lot of overhead from switching back to Python every operation. This overhead is especially bad if you want to run computations on GPUs or in a distributed manner, where there can be a high cost to transferring data. решение:Используйте Python для определения всех операций на основе Graph, а затем позвольте этим операциям одновременно выполняться вне Python.

TensorFlow also does its heavy lifting outside Python, but it tahttps://www.tensorflow.org/get_started/mnist/proskes things a step further to avoid this overhead. Instead of running a single expensive operation independently from Python, TensorFlow lets us describe a graph of interacting operations that run entirely outside Python. This approach is similar to that used in Theano or Torch.

The role of the Python code is therefore to build this external computation graph, and to dictate which parts of the computation graph should be run. See the Computation Graph section of Getting Started With TensorFlow for more detail.

Описание общего API Tensorflow

Session

TensorFlow relies on a highly efficient C++ backend to do its computation. The connection to this backend is called a session.The common usage for TensorFlow programs is to first create a graph and then launch it in a session.

Суммировать:Высокопроизводительный вычислительный модуль для C++ и C++беседатип

Во вводном уроке мы используем

import tensorflow as tf
sess = tf.InteractiveSession()

Tensor

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

Проверьте код ниже:

import tensorflow as tf
# What is Tensor?
ta = [0,0,0,0];
ta[0] = tf.placeholder(tf.float32,[None,784])
ta[1] = tf.zeros([5,5],tf.float32)
print (ta)

Выводятся следующие результаты:

/usr/bin/python2.7 /home/maoyiwei/桌面/Tensorflow/playground/play.py
[<tf.Tensor 'Placeholder:0' shape=(?, 784) dtype=float32>, <tf.Tensor 'zeros:0' shape=(5, 5) dtype=float32>, 0, 0]

Placeholder

Его можно понимать как тензор для хранения входных данных (данные для обучения). Формат следующий:

placeholder( dtype, shape=None, name=None)

x = tf.placeholder(tf.float32, shape=(1024, 1024))

Variables

буквальное значение. Смысл в Tensorflow следующий:

A Variable— это значение, которое живет в графе вычислений TensorFlow.It can be used and even modified by the computation. In machine learning applications, one generally has the model parameters beVariables.

W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

Чтобы инициализировать переменную, выполните следующие действия:

Before Variables can be used within a session, they must be initialized using that session. This step takes the initial values (in this case tensors full of zeros) that have already been specified, and assigns them to each Variable. This can be done for all Variables at once:

sess.run(tf.global_variables_initializer())

tf.matmul(x,W)

Умножение матриц (x*W): подробности см. в документации:

Matmul(a,b) Return:

Тензор того же типа, что и a и b, где каждая самая внутренняя матрица является произведением соответствующих матриц в a и b, например, если все транспонированные или присоединенные атрибуты имеют значение False:

output[…, i, j] = sum_k (a[…, i, k] * b[…, k, j]), для всех индексов i, j.

tf.reduce_XXX

Глядя на документацию, это объясняется следующим образом:

Computes the XXXX of elements across dimensions of a tensor.

Основные параметры следующие:

reduce_mean(
    input_tensor, # 输入的tensor
    axis=None, # 维度
    # keep_dims=False,
    # name=None,
    # reduction_indices=None
)
  • input_tensor: The tensor to reduce. Should have numeric type.
  • axis: The dimensions to reduce. If None (the default), reduces all dimensions.

Например:

# 'x' is [[1., 2.]
#         [3., 4.]]

tf.reduce_mean(x) ==> 2.5 #如果不指定第二个参数,那么就在所有的元素中取平均值
tf.reduce_mean(x, 0) ==> [2.,  3.] #指定第二个参数为0,则第一维的元素取平均值,即每一列求平均值
tf.reduce_mean(x, 1) ==> [1.5,  3.5] #指定第二个参数为1,则第二维的元素取平均值,即每一行求平均值

Обычно используются следующие API:

  • среднее значение
  • уменьшить_макс. максимальное значение
  • минимальное значение reduce_min
  • суммирование reduce_sum

Почему он называется «Уменьшить»?Объяснение этого вопроса в Stackoverflow гласит:

Reduce is just a name for a family of operations which are used to create a single object from the sequence of objects, repeatedly applying the same binary operation.

tf.nn

Некоторые функции активации, функции свертки и т. д. аннотированы в исходном коде следующим образом:

"""## Activation Functions

The activation ops provide different types of nonlinearities for use in neural
networks.  These include smooth nonlinearities (`sigmoid`, `tanh`, `elu`,
`softplus`, and `softsign`), continuous but not everywhere differentiable
functions (`relu`, `relu6`, and `relu_x`), and random regularization
(`dropout`).

tf.train

Метод обучения (функция потерь при обучении). Будет лучше понять код напрямую.

# define a math model
print('make model')
# 占位符(你的数据)
x = tf.placeholder(tf.float32,[None,784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)

# train it
print('train it')
# 占位符(预测数据)
y_ = tf.placeholder(tf.float32,[None,10])
# 计算交叉熵
cross_entropy = tf.reduce_mean(-tf.reduce_sum( y_*tf.log(y),reduction_indices=[1]))
# 使用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.55).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
for _ in range(1000):
	# print('抓取100个随机数据训练')
  	batch_xs, batch_ys = mnist.train.next_batch(100)
	# print(x,y)
  	sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

Этот feed_dict и заполнитель соответствуют друг другу.

Запомните эти два предложения:

train_step = tf.train.GradientDescentOptimizer(0.55).minimize(cross_entropy)

sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

Дополнительное примечание о sess.run. Вы можете передать tf.train или тензор.Например, следующая модель оценки является примером входного тензора.В настоящее время sess.run возвращает результат вычисления тензора.

# Evaluating our Model
print('start to evaluate')
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

Где tf.cast используется для преобразования данных.

Addition

Найдите другой интересный веб-сайт Tinker With aNeural Network in Your Browser.