Table of Contents
第三章 Tensorflow使用入门
完成TensorFlow的安装后,终于可以进行TensorFlow的初步体验。文中所示代码都是在JupyterNotebook中输入且验证无误。
3.1 创建图
在TensorFlow中的计算图如下所示:
import tensorflow as tf
x = tf.Variable(3, name="x")
y = tf.Variable(4, name="y")
f = x*x*y+y+2
计算图不仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制。
3.2 执行图
尽管在上一节中创建了计算图,但它并没有执行任何计算,甚至连变量都没有初始化。需要打开一个TensorFlow会话来初始化变量并执行计算图。一个TensorFlow会话会将计算分发到CPU和GPU等设备上并执行。打开会话并执行计算图的方式如下:
- 最为直接简单的方式是创建一个会话,初始化所有变量,求值,关闭会话(释放资源),代码如下:
sess = tf.Session()
sess.run(x.initializer)
sess.run(y.initializer)
result = sess.run(f)
print(result) #输出为42
sess.close()
上述方式每次都要重复sess.run
,而这种方式的缺点在于:代码复杂,重复执行图导致重复求值(具体见节点生命周期)。
- 通过调用with块创建默认会话,代码如下:
with tf.Session() as sess:
x.initializer.run()
y.initializer.run()
result = f.eval()
print(result) #输出为42
上述方式用x.initializer.run
和f.eval
分别替换sess.run(f)
和sess.run(x)
,这种写法不仅增加了代码可读性还可让会话在块中代码执行结束后自动关闭。
代码x.initializer.run
依然被重复了一次,可以再创建一个节点,在会话执行前初始化所有变量,代码如下:
init = tf.global_variables_initializer() #添加节点
with tf.Session() as sess:
init.run()
result = f.eval()
print(result) #输出为42
- 通过
InteractiveSession()
创建默认会话,代码如下:
sess = tf.InteractiveSession()
init.run() #由于第2步中创建了初始化节点,所以这里可以直接用init.run()
result = f.eval()
print(result)
sess.close()
由上述各种方法可知,一个TensorFlow程序通常分为两部分:第一部分用来构建一个计算图(构建阶段),第二部分则用来执行这个图(执行阶段)。构建阶段利用计算图来展示机器学习模型及训练所需的计算。而执行阶段则重复执行训练动作,逐步提升模型参数。
3.3 管理图
在TensorFlow中创建的所有节点都会自动添加到默认图上,检验如下:
x1 = tf.Variable(1)
x1.graph is tf.get_default_graph() # 结果显示为TRUE
有时需要将节点添加到不同的计算图当中,可以用with块将目标计算图设置为默认图并添加,代码如下:
graph = tf.Graph()
with graph.as_default():
x2 = tf.Variable(3)
x2.graph is graph # 结果显示为TRUE
x2.graph is tf.get_default_graph() # 结果显示为FALSE
3.4 参考
[1] Geron.机器学习实战
[2] blackx.tensorflow中计算图的概念