如何在 Tensorflow 2.0 中使用 K.get_session 或如何迁移它?

Posted

技术标签:

【中文标题】如何在 Tensorflow 2.0 中使用 K.get_session 或如何迁移它?【英文标题】:How to use K.get_session in Tensorflow 2.0 or how to migrate it? 【发布时间】:2020-02-03 22:31:35 【问题描述】:
def __init__(self, **kwargs):
    self.__dict__.update(self._defaults) # set up default values
    self.__dict__.update(kwargs) # and update with user overrides
    self.class_names = self._get_class()
    self.anchors = self._get_anchors()
    self.sess = K.get_session()

RuntimeError: get_session 在使用 TensorFlow 2.0 时不可用。

【问题讨论】:

【参考方案1】:

Tensorflow 2.0 不再直接公开 backend.get_session,但代码仍然存在并为 tf1 公开。

https://github.com/tensorflow/tensorflow/blob/r2.0/tensorflow/python/keras/backend.py#L465

您可以将它与 tf1 兼容的接口一起使用:

sess = tf.compat.v1.keras.backend.get_session()

或者导入带有内部路径的tenforflow后端:

import tensorflow.python.keras.backend as K
sess = K.get_session()

【讨论】:

【参考方案2】:

为了避免在tensorflow 2.0升级后使用get_session,使用tf.distribute.Strategy获取模型。要加载模型,请使用tf.keras.models.load_model

import tensorflow as tf

another_strategy = tf.distribute.MirroredStrategy()
with another_strategy.scope():
    model = Service.load_deep_model()

def load_deep_model(self, model):
    loaded_model = tf.keras.models.load_model("model.h5")
    return loaded_model

希望这会有所帮助。因为这对我有用。

我也尝试在这篇实用程序文章中进行解释。 https://www.javacodemonk.com/runtimeerror-get_session-is-not-available-when-using-tensorflow-2-0-f7238546

【讨论】:

【参考方案3】:

可能与默认启用的 tf 2.0 急切执行有关。 尝试 将张量流导入为 tf

tf.compat.v1.disable_eager_execution()

【讨论】:

我已经禁用了 Eager Execution,我仍然有 get_session 的问题,所以不相关。 我认为这无关。【参考方案4】:

我遇到了同样的错误并尝试安装和卸载。最后发现库实际上没有正确安装。

我浏览了我的每个图书馆:

C:\Users\MyName\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\

我在 Keras 的站点包中找到了该文件,该文件是从 Tensorflow 库调用的,而该库是从另一个文件夹调用的。我发现最后一个文件夹有 get_session(),但它没有被调用。当我检查目录时,我发现 get_session 没有被加载。在文件目录 /tensorflow/keras/backend.py 中导入所有内容,但错过了 get_session。

为了解决这个问题,我添加了这一行:

from tensorflow.python.keras.backend import get_session

然后保存。下次我运行我的代码时就很好了。

我对这个页面给出了相同的答案How to fix ' module 'keras.backend.tensorflow_backend' has no attribute '_is_tf_1''

【讨论】:

以上是关于如何在 Tensorflow 2.0 中使用 K.get_session 或如何迁移它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TensorFlow 2.0 中使用 Dataset.window() 方法创建的窗口?

如何在 Tensorflow 2.0 中使用 K.get_session 或如何迁移它?

如何在 Tensorflow 2.0 + Keras 中进行并行 GPU 推理?

如何在 tensorflow 2.0 w/keras 中保存/恢复大型模型?

如何在 tfds.load() 之后在 TensorFlow 2.0 中应用数据增强

如何保存使用Tensorflow 1.xx中的.meta检查点模型作为部分的Tensorflow 2.0模型?