Pytorch,无法获得<class'torch.tensor'=“”>的代表

时间:2018-06-24 11:54:29

标签: pytorch mse

我正在PyTorch中实现一些RL,并且不得不编写自己的mse_loss函数(在Stackoverflow上找到了该函数))。 损失函数为:

def mse_loss(input_, target_):    
    return torch.sum(
        (input_ - target_) * (input_ - target_)) / input_.data.nelement()

现在,在我的训练循环中,第一个输入是这样的:

tensor([-1.7610e+10]), tensor([-6.5097e+10])

Input tensor

使用此输入,我将得到错误:

Unable to get repr for <class 'torch.Tensor'>

计算a = (input_ - target_)可以正常工作,而b = a * ab = torch.pow(a, 2)分别会因上述错误而失败。

有人知道这个解决方法吗?

非常感谢!

更新: 我只是尝试使用torch.nn.functional.mse_loss,这将导致相同的错误。

2 个答案:

答案 0 :(得分:1)

当我使用以下代码时,我遇到了相同的错误

criterion = torch.nn.CrossEntropyLoss().cuda()
output=output.cuda()
target=target.cuda()
loss=criterion(output, target)

但是我终于发现我的错:输出就像tensor([[0.5746,0.4254]])而目标像tensor([2]),数字2超出了输出的指标

当我不使用GPU时,此错误消息是:

RuntimeError: Assertion `cur_target >= 0 && cur_target < n_classes' failed.  at /opt/conda/conda-bld/pytorch-nightly_1547458468907/work/aten/src/THNN/generic/ClassNLLCriterion.c:93

答案 1 :(得分:0)

您是否正在使用GPU?

我有类似的问题(但是我正在使用聚集操作),当我将张量移动到CPU时,我会收到一条正确的错误消息。我更正了错误,切换回GPU,一切正常。 当pytorch来自GPU内部时,可能无法输出正确的错误。