Python PyTorch模型验证:张量a(32)的大小必须与张量b(13)的大小相匹配

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>

我是机器学习的初学者。所以为了学习,我尝试开发一个简单的CNN来对棋子进行分类。网络已经工作了,我可以训练它,但是我的验证功能有问题

我无法将我的预测与我的
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)