Keras和TensorFlow:保存非顺序模型权重

4

我正在使用Tensorflow 1.8.0版本...

Keras文档中关于如何保存模型的说明没有提到保存序贯模型与从函数式API创建的模型之间的区别。但是,以下所有代码块都无法正常运行:

import tensorflow as tf
net = tf.keras.models.Model()
net.save('file')

或者

import tensorflow as tf
net = tf.keras.models.Model()
print(net.to_json())

或者

import tensorflow as tf
net = tf.keras.models.Model()
print(net.to_yaml())

或者

import tensorflow as tf
net = tf.keras.models.Model()
print(net.get_config())

他们引发了一个NotImplementedError。在Keras模块中,相关行是

if not self._is_graph_network:
  raise NotImplementedError

这段文字中提到的内容出现在.saveget_config函数中(后者也被to_jsonto_yaml调用)。
唯一有效的方法是以下内容。
import tensorflow as tf
net = tf.keras.models.Model()
net.save_weights('file')

如果这种情况下权重保存成功并且可以通过net.load_weights成功加载。

然而,将上述代码块的第二行替换为net = tf.keras.models.Sequential(),使net成为一个序列模型,可以使得上述所有内容都能正常运行。

使用函数式API(使用Model而不是Sequential)创建的Keras模型的结构真的无法保存吗?现在,我们只能保存权重吗?


你有没有考虑过你的所有模型都是空的,这就是为什么保存失败的原因? - Dr. Snoopy
我实际上还没有,这很讽刺,因为我刚刚回答了一个关于那个主题的问题。我会尝试使用一些变量并进行更新。谢谢! - Jay Calamari
你不必尝试,我们知道保存模型是可行的,我每天都这样做,你声称这种方式没有被实现是荒谬的。 - Dr. Snoopy
Keras 抛出 NotImplementedError 的说法并不荒谬,而是可以重复和验证的。老实说,这是一个误导性的错误。 - Jay Calamari
但这只是因为模型为空,没有东西可以保存。你可以直接询问是否可以保存模型。 - Dr. Snoopy
那是我的问题,不是一个声明。你无论如何都回答了它,而且我也认为值得一提的是当前的错误信息是误导性的,但此时似乎剩下的内容应该转到聊天中去。 :p - Jay Calamari
1个回答

3
当然可以保存模型,你的所有示例都有一个空模型,保存没有意义。Keras的作者只是没有实现这种情况。
如果你使用非空模型进行测试,你会发现保存工作得非常完美。我们每天都在使用它。

我有同样的问题。使用普通模型时,我可以拟合并评估该模型,但无法保存它 :( - RedEyed
@RedEyed 他们提出一个新问题,仅仅说我也有这个问题并不是很有用。细节很重要。 - Dr. Snoopy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接