哈Ha! 我向您介绍了Ankit Sachan撰写的文章“ TensorFlow教程:10分钟实用的TensorFlow课程(面向快速学习者)”的翻译。
本TensorFlow教程适用于对机器学习有基本了解并试图开始使用TensorFlow的任何人。
首先,您必须安装TensorFlow。 您可以在本指南中安装它。 本课分为两部分:第一部分,我们通过一个工作示例解释基础知识;第二部分,我们建立线性回归模型。
第1部分。TensorFlow基础
TensorFlow是一个数字库,其中数据通过图形传递。 TensorFlow中的数据由n维数组-张量表示。 该图由数据(张量)和数学运算组成。
在图的节点中是数学运算。
图的边缘表示在操作之间“流动”的张量。
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.0
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))
该代码将输出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图和学习过程的工具。
c) 占位符是等待用数据初始化的张量。 它们用于仅在会话中实际执行代码时才提供的数据。 转移到占位符的是一本字典,其中包含占位符的名称及其含义:
a = tf.placeholder("float") b = tf.placeholder("float") y = tf.multiply(a, b) fd = {a: 2, b: 3} with tf.Session() as sess: print(sess.run(y, fd))
该代码将输出6.0
1.4。 TensorFlow中的设备
TensorFlow具有非常强大的内置功能,可以在GPU,CPU或集群上运行您的代码。 它使您有机会选择要在其上运行代码的设备。 但是,当您刚开始使用TF时,无需考虑这一点。
因此,这是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))
该代码将输出35
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个数据点,并尝试将线与它们匹配。
2.1。 创建训练数据集
trainX的值介于-1和1之间,trainY的值是trainX值的3倍加上一些随机变量:
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。 造型
线性回归模型的形式为
-我们必须计算w的值。 让我们将w初始化为零并创建一个模型来解决此问题。 我们将成本函数定义为
(Y-y__model)^ 2
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))
请注意,首先要做的是通过在session.run()内部调用init来初始化变量。 稍后我们运行train_op ,喂她feed_dict 。 最后,我们输出w的值(再次在sess.run()内部),该值应约为3。
练习:
如果在此代码之后创建一个新会话并尝试打印w,将输出什么?
with tf.Session() as sess: sess.run(init) print(sess.run(w))
是的,您理解正确,将显示0.0。 一旦我们离开了之前创建的会话,所有操作便不复存在。
我希望本教程可以帮助您快速入门TensorFlow。 请随时在评论中提出您的问题。 完整的代码可以在这里下载。