ValueError: Dimension 1 in both shapes must be equal, but are 10 and 12.Shapes are[40,10]and[40,12]

训练完模型拿来做预测(prediction)时,遇到两个bug:

1. 加载模型出错了:
model = load_model(model_path)

报错:
ValueError: Unknown layer: ArcFace

解决方法:
这是由于训练模型时使用的layer是自定义的,因此,只需要在加载模型时指定这个自定义层就可以了,如下:
python model = load_model(model_path, custom_objects={'ArcFace': ArcFace})
custom_objects={}中的花括号中填自定义的layer,我把ArcFace写成了类,import 了之后,填进花括号里就解决这个问题了,如果有多个自定义的layer,就加个逗号,继续在花括号中列出,加载模型的时候会根据名字自动搜索这些自定义的layer

2. 第二个错误error:

解决完第一个错误,又出现第二个错误 TAT:
ValueError: Dimension 1 in both shapes must be equal, but are 10 and 12. Shapes are [4096,10] and [4096,12]. for 'Assign_90' (op: 'Assign') with input shapes: [4096,10], [4096,12].
看这个error就是关于label的,因为我的label是12个,而这里出现的10就很奇葩了,检查了半天,其实是由于解决上一个error时的并发症,自定义的layer是有默认的节点数的,在训练的时候都有输入参数设定,现在把代码转到另一个PC端,忘记了。
如下面代码:

class ArcFace(Layer):
    def __init__(self, n_classes=10, s=30.0, m=0.50, regularizer=None, **kwargs):
        super(ArcFace, self).__init__(**kwargs)
        self.n_classes = n_classes
        self.s = s
        self.m = m
        self.regularizer = regularizers.get(regularizer)
...

解决方法:
我在ArcFace这个类中设置了节点数默认为10,即n_classes=10
只要改成对应的类别数就可以了。


写这些主要是为了记录解决问题的过程和思路,每个人遇到的问题可能会有些不同,但看看别人的解决思路,没准能开启思路。
Sharing is a good habit.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值