machine-learning - Crossentropyloss Pytorch:Targetsize 与 Torchsize 不匹配
问题描述
我想使用 pytorch 的 Crossentropyloss,但不知何故我的代码只适用于批量大小 2,所以我假设目标和输出的形状有问题。我收到以下错误:
Value Error: Expected target size (50, 2), got torch.Size([50, 3])
我的目标大小是(N=50,batchsize=3)
,我的模型的输出是(N=50, batchsize=3, number of classes =2)
. 在输出层之前,我的形状是 (N=50,batchsize=3,dimensions=64)。
我需要如何更改形状才能使 Crossentropyloss 起作用?
解决方案
如果没有有关您的模型的更多信息,这就是我要做的。你有一个多对多 RNN,它(seq_len, batch_size, nb_classes)
的输出和目标是(seq_len, seq_len)
. 该nn.CrossEntropyLoss
模块可以将其他维度(batch_size, nb_classes, d1, d2, ..., dK)
作为输入。
您可以通过排列轴来使其工作,使得输出的张量具有 shape (batch_size, nb_classes, seq_len)
。这应该使它发生:
output = output.permute(0, 2, 1)
此外,您的目标还必须更改为(batch_size, seq_len)
:
target = target.permute(1, 0)
推荐阅读
- php - 尽管时区正确,PHP strftime 输出错误的格式
- javascript - 如果用户不响应,Alexa 会发出错误(“技能响应被标记为失败”)
- c# - MethodInfo.Invoke 返回的对象与目标类型不匹配
- python - 如何在表示航班的字典中列出重复值?
- python - python numpy exponentially spaced samples between a start and end value
- c++ - 我应该如何运行游戏循环并更改其对象?
- javascript - 带有 javascript 的交互式日历
- javascript - 如何在另一个文件中获取组件的状态反应本机
- python - Groupby 前两个最早日期,然后是前两个日期之间的平均时间 - 熊猫
- php - 图像生成