2. 交互式使用
前面的例子中我们使用了Session来启动图,并且调用Session.run方法来执行op。
为了便于使用诸如 IPython 之类的 Python 交互环境, 可以使用 InteractiveSession 代替 Session 类, 使用 Tensor.eval() 和 Operation.run() 方法代替 Session.run(). 这样可以避免使用一个变量来持有会话.
# coding=utf-8
# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])
# 使用初始化器 initializer op 的 run() 方法初始化 'x'
x.initializer.run()
# 增加一个加法 add op, 从 'x' 加上 'a'. 运行加法 op, 输出结果
# sub = tf.sub(x, a)
add = tf.add(x, a)
print(add.eval())
# ==> [4. 5.]
文档中给的是减法sub = tf.sub(x, a)
,但是运行减法会报错:
查看原代码后发现sub()改为了subtract()
得到结果:
………
这是一个小插曲哈,这一节的主题是“交互式使用”,而不是代码问题。。
InteractiveSession类就是一个用户交互式上下文的TensorFlow的 Session
。就像一个shell.与常规session不同的地方在于,InteractiveSession在构造器中将自己安装为默认session。 @{tf.Tensor.eval}和 @{tf.Operation.run}方法会使用该session来运行ops。
在在交互式shells和 [IPython notebooks]中就会很方便,因为它避免了必须通过一个显式的“session”对象来运行ops。
举例说明:
sess = tf.InteractiveSession()
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
# 我们可以使用'c.eval()' 而不用 'sess'
print(c.eval())
sess.close()
注意,当在“with”语句中创建时,常规会话本身作为默认session使用。
非交互式程序中常用的方法是遵循以下模式:
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
with tf.Session():
# 这里也能使用 'c.eval()'
print(c.eval())