问题原因
"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技术站