从yolov2加载自定义模型时出现keras问题

2024-03-29 12:49:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经从{}中搜索了一些关于{}的答案,但是我仍然有一个问题

我非常密切地遵循这个模型(https://github.com/experiencor/keras-yolo2),并在自定义数据集上进行培训

我已经完成了培训,它给了我一个yolov2.h5文件,基本上是模型权重,以适应keras模型。但是我在加载模型时遇到了一些问题

加载模型后(在separate.py文件中)

model = load_model('file_dir/yolov2.h5')

首先我遇到了这个问题

NameError: name 'tf' is not defined

然后我向上搜索,修改代码以添加自定义对象:

model = load_model('file_dir/yolov2.h5', custom_objects={'tf':tf})

这将清除第一个错误,但会导致另一个错误

ValueError: Unknown loss function : custom_loss

我使用了来自yolov2(https://github.com/experiencor/keras-yolo2/blob/master/frontend.py)的自定义_loss函数,因此我尝试通过

from frontend import YOLO
model = load_model('file_dir/yolov2.h5' custom_objects={'tf':tf, 'custom_loss':YOLO.custom_loss)

但遇到了另一个错误:

TypeError: custom_loss() missing 1 required positional argument

我被困在这里,因为我不知道如何适应定制损耗的参数。在这方面寻求一些帮助(由于我正在用不同的python脚本separate.py加载我的模型,所以我不太理解这一部分)。非常感谢你

(编辑:此修复也不适用于我)

model = load_model('file_dir/yolov2.h5', compile = False)

Tags: pyhttps模型githubmodeltf错误dir
1条回答
网友
1楼 · 发布于 2024-03-29 12:49:18

要解决此问题,因为您已经拥有了网络,只需保存经过训练的权重(就像keras trainer在callback中所做的那样)。 对于测试,创建模型,无需编译,然后使用model.load\u weights(path/to/saved/weights)加载经过训练的权重。 如果以不同的方式创建网络,也可以使用“by_name=True”,这一次应保留图层名称

手动设置权重的另一个选项id;为此,您将加载.h5文件bu“h5py”(h5py.file(path/to/weights,mode='r')),例如(看看keras是如何做到的),然后尝试对应模型的图层名和加载的权重

相关问题 更多 >