我遵循示例here,其中文档显示:
输入:(N,C),其中C =类数
目标:(N),其中每个值为0≤目标[i]≤C-1
在为2d张量给出的示例中就是这种情况
Shipment job = Shipment.Builder.newInstance(...)
VehicleRoute.Builder route = VehicleRoute.Builder.newInstance(...)
route.addPickup(job);
route.addDelivery(job);
但是对于二维张量,我遇到了错误
loss = nn.CrossEntropyLoss()
input = torch.randn(3, 5, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
output = loss(input, target)
output.backward()
import torch.nn as nn
import torch
loss = nn.CrossEntropyLoss(ignore_index=0)
inputs = torch.rand(32, 128, 3)
targets = torch.ones(32, 128)
loss(inputs, targets.long())
据我所知,我在设置尺寸方面做得很好。错误消息似乎认为我正在提供2d向量,但是我给它提供了3d向量,缺少128尺寸。
此损失功能是否存在我未正确设置的内容?
答案 0 :(得分:1)
这是文档中有关K维损耗的内容:
还可通过提供大小≥K≥1的大小(minibatch,C,d_1,d_2,...,d_K)输入来用于更高维度的输入(例如2D图像),其中K是维度数,以及形状合适的目标(见下文)。
如果您有3个类,则正确的输入应为TfLiteTensorCopyFromBuffer(inputTensor, imageDataBuffer, imageSize * sizeof(float));
形状:
<i id="arrowIcon" class="fa fa-car fa-spin" onclick="this.classList.remove('fa-spin')"></i>
如果您有128个类别,则目标应为(32, 3, 128)
形状:
import torch.nn as nn
import torch
loss = nn.CrossEntropyLoss(ignore_index=0)
inputs = torch.rand(32, 3, 128)
targets = torch.ones(32, 128)
loss(inputs, targets.long())