PyTorch:_thnn_nll_loss_forward未针对手电筒类型实现。

比那托兹

当尝试使用PyTorch创建模型时,当我尝试实现loss函数时nll_loss,它将引发以下错误

RuntimeError: _thnn_nll_loss_forward is not implemented for type torch.LongTensor 

我创建的拟合函数是:

for epoch in tqdm_notebook(range(1, epochs+1)):
    for batch_idx, (data, targets) in enumerate(train_loader):
        optimizer.zero_grad()
        net.float()
        output = net(data)
        output_x = output.argmax(dim=2) #to convert (64,50,43) -> (64, 50)
        loss = F.nll_loss(output_x, targets)
        loss.backward()
        optimizer.step()
        if batch_idx % 100 == 0:
            print('Train epochs: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx*len(data), len(ds.data),
                100.*batch_idx / len(ds), loss.item()
            ))

输出和目标的形状为 64,50 且dtypes都torch.int64适用。

hai

看看说明F.nll_loss它期望获得的不是argmax预测(类型torch.long)的输入,而是完整的64x50x43预测矢量(类型torch.float的输入请注意,实际上,您提供的预测F.nll_loss要比您提供的地面真理目标具有更多的维度。

就您而言,只需删除argmax:

loss = F.nll_loss(output, targets)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章