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

来源:互联网 发布:欧洲人怎么看中国知乎 编辑:程序博客网 时间:2024/05/01 04:31

本人在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的输出数目大于样本类别数会对网络有怎样的影响~

阅读全文
0 0