ValueError: Dimension 0 in both shapes must be equal, but are 1 and 21. Shapes are [1,1,1024,54] and

使用YOLOv3训练自己的数据集,完成后进行测试报错:

问题(1):ValueError: Dimension 0 in both shapes must be equal, but are 1 and 21. Shapes are [1,1,1024,54] and [21,1024,1,1]. for 'Assign_360' (op: 'Assign') with input shapes: [1,1,1024,54], [21,1024,1,1].

分析:据查是类别class维度不匹配,虽然我在训练前把voc_classes.txt和coco_classes.txt中的类别都删到只剩person了,但是我的换行符并没有停留在第一行,如下:

file:///home/fire/Pictures/Screenshot%20from%202020-06-19%2010-18-27.png

file:///home/fire/Pictures/Screenshot%20from%202020-06-19%2010-16-14.png

修改后先测试一下:

classes_path = 'voc_classes.txt'
def get_classes(classes_path):
    with open(classes_path) as f:
        class_names = f.readlines()
    class_names = [c.strip() for c in class_names]
    return class_names
 
class_names = get_classes(classes_path)
num_classes = len(class_names)
print(num_classes)

最终,只能重新训练,可惜我跑了一周的代码,无语。。。

问题(2):ValueError: Cannot create group in read only mode.Keras

分析:参考https://blog.csdn.net/qq_36387683/article/details/91957528 吧

model.save_weights()保存的模型结果,它只保存了模型的参数,但并没有保存模型的图结构

model.save()保存的模型结果,它既保持了模型的图结构,又保存了模型的参数

由save()保存下来的h5文件才可以直接通过load_model()打开

save_weights()保存的模型不含有模型结构信息,所以我们需要把模型结构再描述一遍才可以加载.h5

那为什么要选择使用model.save_weights()呢,因为model.save()保存的东西太多了,占用内存吧,我说的不严谨,先就这样吧

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值