目前,我正在研究基于爱丽丝梦游仙境故事生成文本的lstm。我有两个脚本,training script和testing script。对于每个时代,我决定使用权重创建自己的文件,您可以看到创建的所有文件here。训练脚本完美地运行,它创建所有文件并且在执行期间没有错误。当我运行我的测试脚本时,它会编译,但在执行期间,给我一个错误
ValueError: You are trying to load a weight file containing 2 layers into a model with 3 layers.
我为两个网络创建了完全相同的架构,但我找不到问题。 我用Google搜索,发现它有效。我将我的keras版本更改为2.0.2并且它可以工作,但是如何更改我的代码,以便它可以在最新版本的keras上运行?
答案 0 :(得分:0)
这是因为您以调用ModelCheckpoint
的方式保存整个模型(架构+权重+等)。根据{{3}},ModelCheckpoint
采用名为save_weights_only
的参数,其默认值为False
,以便:
如果为True,则仅保存模型的权重 (
model.save_weights(filepath)
),否则保存完整模型 (model.save(filepath)
)。
因此,在您的代码中,您要保存整个模型,因为您没有设置save_weights_only=True
。您可以使用Keras documentation加载模型,也可以设置save_weights_only=True
并再次运行训练脚本(如果您只想保存权重而不是整个模型。或者,仍然存在实现这一目标的更好方法:您可以使用load_model
加载模型,然后使用save_weights
保存权重,最后删除模型文件)。