1.问题
在ssds检测项目中,其中求损失的multibox_loss.py中遇到一个bug,错误为:
IndexError: The shape of the mask [32, 2990] at index 0 does not match the shape of the indexed tensor [95680, 1] at index 0
报错代码如下:
loss_c[pos] = 0
其中,pos和loss_c的尺寸维度分别是:
loss_c.size torch.Size([95680, 1])
pos.size torch.Size([32, 2990])
然后,我写了一小段代码,来看一下loss_c[pos]操作是怎么操作的,其中的原理以及作用是什么。
测试代码:
loss = torch.rand(10,1)
print('loss',loss)
pos = pos.byte()
print('pos.size',pos.size(),'pos.type',type(pos),'\n','pos',pos)
print(loss[pos])
结果如下:
可以看出,如果直接用上述的pos和loss_c的维度是会报上述的错误,经过我的测试,loss_c[pos]操作是把pos为1的元素对应的位置上