报错:
terminate called after throwing an instance of 'dmlc::Error'
what(): [10:17:39] include/mxnet/./tuple.h:220: Check failed: i >= 0 && i < ndim(): index = 1 must be in range [0, -1)
Stack trace:
[bt] (0) /home/user1/miniconda3/lib/python3.7/site-packages/mxnet/libmxnet.so(+0x307d3b) [0x7f1147037d3b]
[bt] (1) /home/user1/miniconda3/lib/python3.7/site-packages/mxnet/libmxnet.so(+0x30a9f8) [0x7f114703a9f8]
[bt] (2) /home/user1/miniconda3/lib/python3.7/site-packages/mxnet/libmxnet.so(+0x8d0444) [0x7f1147600444]
[bt] (3) /home/user1/miniconda3/lib/python3.7/site-packages/mxnet/libmxnet.so(+0x345ae5d) [0x7f114a18ae5d]
复现代码:
暂时没能复现。。可能之前的代码写的确实太挫了,写不回去了
解析:
mxnet的报错没头没脑的,根本看不出来是哪行代码引起的。
多方面排查:
- 网络层定义的原因
- shape对不上的原因
- 自己的实现是否能反映论文中的结构
解决:
...
########################## GDN #######################################
gdn = mx.sym.FullyConnected(data=fc1, num_hidden=256, name='gdn_fc1')
gdn = mx.sym.BatchNorm(data=gdn, fix_gamma=False, eps=2e-5, momentum=bn_mom, name='gdn_bn1')
gdn = mx.sym.FullyConnected(data=gdn, num_hidden=256, name='gdn_fc2')
gdn = mx.sym.BatchNorm(data=gdn, fix_gamma=False, eps=2e-5, momentum=bn_mom, name='gdn_bn2')
print('Added GDN')
########################## GDN #######################################
gdn = mx.sym.FullyConnected(data=gdn, num_hidden=4, name='gdn_out_fc3') # [batch_size, 2048]
gdnWeights = mx.sym.SoftmaxActivation(data=gdn, name='gdn_out_softmax')
gdnWeights = mx.sym.reshape(gdnWeights, (-1, 4, 1))
groupsFc = mx.sym.concat(fc2, fc3, fc4, fc5, dim=1) # dim=1,Stitching by row,(1 row, 512 columns) per sample,[batch_size, 2048]
groupsFc = mx.sym.reshape(groupsFc, (-1, 4, 512))
fcGroups = mx.sym.broadcast_mul(groupsFc, gdnWeights)
fcGroups = mx.sym.sum_axis(fcGroups, axis=1) # axis=1, sum by row, [batch_size, 512] -> [batch_size, 1]
fc1 = fc1 + fcGroups # (1, 512) + (1,512)
print('Net built.')
return fc1