解决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),也才三行,是的,只是个加载模型的过程。
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文件更大);
不混淆使用一般不会报错
比对如下:

当尝试使用load_model()加载.h5模型时遇到'Nomodelfoundinconfigfile.'错误,通常是因为只保存了权重而未保存模型结构。解决方案包括:1)重新定义模型结构后再加载;2)重新训练模型,保存完整模型(不设置save_weights_only=True)。建议始终保存模型结构和权重以避免此类问题。
7266

被折叠的 条评论
为什么被折叠?



