解决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文件更大);
不混淆使用一般不会报错
比对如下:
在这里插入图片描述

  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
这个错误通常是由于传递给函数的日期格式不正确造成的。month参数必须在1到12之间,否则就会出现这个错误。 如果您传递的日期格式是字符串,可以尝试按照正确的格式传递日期。例如,如果您想传递2022年5月的日期,可以使用"2022-05"这种格式。 如果您使用的是datetime.date对象,则可以使用对象的strftime方法将日期格式化为字符串,然后再传递给函数。 另外,如果您传递的日期是无效的,例如2月30日,也会导致这个错误的出现。在传递日期之前,最好检查一下日期是否有效。 以下是一个示例程序,用于检查日期是否有效,并将日期格式化为正确的格式: ```python import datetime def check_date(date_str): try: datetime.datetime.strptime(date_str, '%Y-%m-%d') return True except ValueError: return False def format_date(date_str): if check_date(date_str): return date_str else: date_obj = datetime.datetime.strptime(date_str, '%Y%m%d') return date_obj.strftime('%Y-%m') # 示例:将202205格式的日期格式化为2022-05格式 date_str = '202205' formatted_date = format_date(date_str) print(formatted_date) ``` 在这个示例程序中,我们定义了两个函数:check_date和format_date。check_date函数用于检查日期是否有效,如果有效则返回True,否则返回False。format_date函数用于将日期格式化为正确的格式,如果传递的日期格式为"YYYY-MM-DD",则直接返回,否则将日期格式化为"YYYY-MM"的格式。 在进行日期格式化之前,我们先调用check_date函数检查日期是否有效。如果日期无效,则抛出ValueError异常。如果日期有效,则使用datetime库的strptime函数将日期字符串转换为datetime.datetime对象,然后使用对象的strftime方法将日期格式化为正确的格式。 您可以参考这个示例程序,根据您的实际情况进行调整和修改。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sinysama

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值