详解TensorFlow报”InvalidStateError: Session has already been started “的原因以及解决办法

yizhihongxing

问题原因

"InvalidStateError: Session has already been started" 的报错一般是因为在同一个程序中开启了多个 TensorFlow 会话。TensorFlow 会话是一个连接客户端程序和 TensorFlow 运行时之间的桥梁,启动一个 TensorFlow 会话等价于让客户端程序和 TensorFlow 运行时进行了通信。

解决方案

避免在同一程序中启动多个 TensorFlow 会话。

解决方法如下:

1.使用 with 语句,让 TensorFlow 管理会话的生命周期,会话会在 with 语句块结束时自动关闭。示例代码如下:

import tensorflow as tf

with tf.Session() as sess:
    # TensorFlow 计算图
    ...

2.使用 InteractiveSession(), 它会自动将新建立的会话注册为默认会话,并减少一些代码复杂度。示例代码如下:

import tensorflow as tf

sess = tf.InteractiveSession()
# TensorFlow 计算图
...
# 计算结束后关闭 Session
sess.close()

3.使用函数式 API(Keras)中的 backend.get_session() ,该函数可获取全局 TensorFlow 会话,示例代码如下:

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session, get_session

# 设置 TensorFlow 配置信息
config = tf.ConfigProto()
config.gpu_options.allow_growth = True   # 可以在使用时动态分配显存

# 设为全局 TensorFlow 会话
sess = tf.Session(config=config)
set_session(sess)

# Keras 计算图
...
# 计算结束后关闭 Session
sess.close()

4.使用 import tensorflow.contrib.eager as tfe,启用 TensorFlow Eager Execution 模式,不需要显式地开启会话,而是通过 Python 控制流自动完成计算,不再像传统 TensorFlow 那样需要在计算图上预先规划好神经网络的整体结构,可避免会话管理的繁琐。相关代码可以参考 TensorFlow 官方教程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解TensorFlow报”InvalidStateError: Session has already been started “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月19日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部