解决ValueError: No model found in config file.

2022-06-17 13:45:58

有朋友给我看了一个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.modelsimport 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文件更大);
不混淆使用一般不会报错
比对如下:
在这里插入图片描述

  • 作者:sinysama
  • 原文链接:https://blog.csdn.net/QAQIknow/article/details/123182184
    更新时间:2022-06-17 13:45:58