解决ValueError: No model found in config file.
有朋友给我看了一个bug: No model found in config file.
使用load_model()加载.h5出现上述问题。我第一反应是缺少了模型结构,也就是下述这样的东西↓
(本文仅记录,防止更多人踩坑。如有错误的地方,恳请多多指教以完善。)
1 报错提示
No model found in config file.
2 问题出现的过程
使用load_model()方法保存模型
3 问题原因分析
看了代码,就两行。加上用的包(from tensorflow.keras.models import load_model),也才三行,是的,只是个加载模型的过程。
filepath="./CNN.weights.h5"
model=load_model(filepath)
这个代码并没有问题,毕竟我也经常用,比较熟。那么,问题只能出现在.h5保存的方式和加载模型的方式上了,我们逐一排除。
4 解决方式
保存模型时,会有以下一些主要的保存方式: ①save()→保存模型参数和网络结构 ②save_weights()→仅保存模型参数。 ③tf.keras.callbacks.ModelCheckpoint()→配置参数后,训练过程中都可以随时保存。
看了下朋友生成模型的代码,他在model.fit中采用了③的方式:
tf.keras.callbacks.ModelCheckpoint(filepath=filepath,monitor='val_accuracy',verbose=1,save_best_only=True,save_weights_only=True)
果不其然,save_weights_only=True,这就是报错的原因,缺少网络图结构,因为代码仅保存参数权重(only!!!)。所以,那就好办了。
4.1 解决方式一:加入网络图结构
为了匹配.h5文件,将网络图结构再写一遍,然后load_model就好了。
4.2 解决方式二:重新保存个新的.h5文件
去掉save_weights_only=True或者把True改为False,重新训练模型并保存.h5文件。(从根本上解决,以后保存模型建议将图结构和参数一起存下来,就多占用点内存而已,平时的玩具模型不是很大,何必偷懒给自己找麻烦呢?┗|`O′|┛ 嗷~~)
tf.keras.callbacks.ModelCheckpoint(filepath=filepath,monitor='val_accuracy',verbose=1,save_best_only=True)
报错也消失了
总结
仅保存网络参数,使用load_weights()。 保存图结构和网络参数,使用load_model()(保存的.h5文件更大); 不混淆使用一般不会报错 比对如下:
|