关于MatConvNet深度学习库Index exceeds matrix dimensions错误注意事项

本人在Win7 64位操作系统下,用MatConvNet深度学习框架训练一个网络用于识别鸟类,这个鸟类有20类,网络训练好后,用于识别一下自己在网上爬的一些小鸟图片,识别效果还不错。于是,想在其它数据集上,比如识别狗狗,训练一下看看效果如何。于是本人直接在狗狗数据集上进行end to end训练,在训练的过程中,出现错误:Index exceeds matrix dimensions。一步一步调试,最终定位到 vl_nnsoftmaxloss函数在执行如下语句出错(第77行):

t = xmax + log(sum(ex,3)) - reshape(x(c_), [sz(1:2) 1 sz(4)]) ;

具体就是x(c_)索引超出x的范围,但是x是1x1x20x8,c_为1x1x1x8,貌似没有超出索引范围,百思不得解。最后突然想到,应该是softmax层判别类的数目应该与参与训练网络的数据集中狗狗的类别数目应该一致,所以赶紧去把网络的最后一个block的输出数目改一下,比如这里狗狗的类别数目为100,则将原来设置为鸟类20类的数目改为100,如下:

net = add_block(net, opts, '7', 1, 1, 256, 100, 1, 0)

修改后,网络开始嗖嗖的训练上了。

总结:其实这个错误一开始就应该避免的,因为在训练网络时,参与训练的数据集中样本的类别数应该与网络最后一个block的输出数目一致(小于),否则就会出现类似Index exceeds matrix dimensions的错误,不过本人还没试过最后一个block的输出数目大于样本类别数会对网络有怎样的影响~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值