Python PyTorch模型验证:张量a(32)的大小必须与张量b(13)的大小相匹配
我是机器学习的初学者。所以为了学习,我尝试开发一个简单的CNN来对棋子进行分类。网络已经工作了,我可以训练它,但是我的验证功能有问题 我无法将我的预测与我的Python PyTorch模型验证:张量a(32)的大小必须与张量b(13)的大小相匹配,python,machine-learning,neural-network,conv-neural-network,pytorch,Python,Machine Learning,Neural Network,Conv Neural Network,Pytorch,我是机器学习的初学者。所以为了学习,我尝试开发一个简单的CNN来对棋子进行分类。网络已经工作了,我可以训练它,但是我的验证功能有问题 我无法将我的预测与我的target\u数据进行比较,因为我的预测只是大小为13的张量,而target.data是[batch\u size]x13。我不知道我的错误在哪里。PyTorch示例几乎都使用此函数将预测与目标数据进行比较 如果有人能帮我,那就太好了 您可以在此处查找其余代码: 错误: <ipython-input-6-6b21e2bfb8a6>
target\u数据进行比较,因为我的预测只是大小为13的张量,而target.data
是[batch\u size]x13
。我不知道我的错误在哪里。PyTorch示例几乎都使用此函数将预测与目标数据进行比较
如果有人能帮我,那就太好了
您可以在此处查找其余代码:
错误:
<ipython-input-6-6b21e2bfb8a6> in validate(model, validation_data,
criterion)
17
18 _, prediction = torch.max(out.data, 1)
---> 19 correct += (prediction == target.data).sum().item()
20
21 loss = loss / len(validation_data)
RuntimeError: The size of tensor a (32) must match the size of tensor b (13) at non-singleton dimension 1
每个索引代表一个类。
torch.max()
函数的输出似乎是类的索引。
我不明白如何将索引与target\u标签
进行比较。我的意思是,我可以编写一个函数来检查预测索引是否有1,但我认为我的错误在其他地方。只需在目标上运行“argmax”:
_, target = torch.max(target.data, 1)
或者更好的方法是,将目标保持为[示例1\u类,示例2\u类,…]
,而不是1-hot编码。什么是out.shape
和target.shape
在失败的示例中?out:torch.Size([32,13])
目标torch.Size([32,13])
谢谢:)。我刚刚尝试了你推荐的方法,但又被卡住了,因为我使用的是binary\u交叉熵
作为损失函数。是的,在PyTorch的例子中,多类分类通常采用负对数似然(又称交叉熵)。
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
_, target = torch.max(target.data, 1)