"Session"是运行TensorFlow操作的类。"Session"对象封装了执行"Operation"对象和计算"张量"对象的环境。
首先导入tensorflow模块:
import tensorflow as tf
AttributeError1:
直接调用tf.Session(),引发这样报错的原因是不能采用这样的调用方式!
>>> sess = tf.Session()
Traceback (most recent call last):
File "" , line 1, in <module>
sess = tf.Session()
AttributeError: module 'tensorflow' has no attribute 'Session'
AttributeError2:
将调用方式改成正确的调用方式之后,仍然报错。解决方案请参考正确的调用方式。
>>> sess = tf.compat.v1.Sesstion()
Traceback (most recent call last):
File "" , line 1, in <module>
sess = tf.compat.v1.Sesstion()
AttributeError: module 'tensorflow._api.v2.compat.v1' has no attribute 'Sesstion'
#禁用TF2.x中的eager
tf.compat.v1.disable_eager_execution()
#Build a graph
a = tf.constant(5.0)
b = tf.constant(7.0)
c = a * b
#Launch the graph in s session
sess = tf.compat.v1.Session()
#打印出张量'c'的计算结果
print(sess.run(c))
会话可能拥有资源,比如 ‘tf.Variable’, ‘tf.queue.QueueBase’, ‘tf.compat.v1.ReaderBase’。当这些资源不再需要的时候,释放它们很重要。为了完成释放session拥有的资源,可以采用下面两种方法。
方法1:普通的实例化,使用close()方法;
sess = tf.compat.v1.Session()
sess.run(...)
sess.close()
方法2:with语句,使用上下文管理器。
with tf.compat.v1.Session() as sess:
sess.run(...)
方法2创建的Session可以在退出上下文,包括当未捕获的异常产生时,自动关闭。因此,不需要调用close()。
run(self, fetches, feed_dict=None, options=None, run_metadata=None)
运行操作并计算在’ fetches '中的张量。
该方法运行TensorFlow计算的一"步(step)",方式是通过运行必要的图片片段(graph fragment)来执行每个"操作"和计算"fetches"中的每个"张量",并用"feed_dict"中的值替换相应的输入值。
'fetches’参数可以是一个单独的图形元素(element),也可以是一个任意的叶节点上包含图形元素的嵌套列表、tuple、namedtuple、dict或OrderedDict。一个图形元素可以是以下类型之一:
tf.Operation
tf.Tensor
tf.SparseTensor
get_tensor_handle
opstring
feed_dict: 将图形元素映射到值的字典。可选的’ feed_dict ‘参数允许调用者覆盖图中张量的值。必须将’ feed_dict '中的每个值转换为对应键(key)的dtype 的numpy array。
可选的’options’参数是一个[‘RunOptions’]协议缓冲区。‘options’允许控制此特定步骤的行为(例如,打开跟踪)。
可选的’ run_metadata ‘参数是一个[’ RunMetadata ']协议缓冲区。当合适时,这一步的非张量输出将被收集在那里。比如,当用户在“选项”中打开跟踪时,所分析的信息将被收集到此参数中并传递回来。
run()的返回值和’fetches’参数有同样的shape,其中叶子被TensorFlow返回的相应值替换。具体来说,如果’ fetches ‘是单个图形元素,则为单个值;如果’ fetches ‘是列表,则为值的列表;如果是字典,则为键与’ fetches ‘相同的字典。在调用中’ fetches '操作的计算顺序是未定义的。
close(self)
关闭这个会话(Session)。调用此方法释放与会话关联的所有资源。