TensorFlow中Session的常见报错及处理

目录

  • Session
    • 常见报错
    • 正确调用方式
    • 释放资源
  • 方法之run(...)
      • 功能
      • 参数
      • 返回值
  • 方法之close()
      • 功能

  我使用的TensorFlow版本2.2.0rc2,新版和旧版还是有所不同的。

Session

  "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(…)

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
    相应的获取值将为"None"。
  • tf.Tensor
    相应的获取值将是一个包含该张量值的numpy ndarray
  • tf.SparseTensor
    相应的获取值将是一个包含该sparse tensor值的"tf.compat.v1.SparseTensorValue"。
  • get_tensor_handle op
    相应的获取值将是一个包含该张量句柄的numpy ndarray。
  • string
    它是图形中一个张量或运算的名称。

   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()

close(self)

功能

  关闭这个会话(Session)。调用此方法释放与会话关联的所有资源。

你可能感兴趣的:(python,tensorflow)