Pytorch, невозможно получить представление для ‹класса 'torch.Tensor'›

Я реализую некоторый RL в PyTorch, и мне пришлось написать свою собственную функцию 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])

Входной тензор

С этим вводом я получу ошибку:

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

Вычисление a = (input_ - target_) работает нормально, а b = a * a соответственно b = torch.pow(a, 2) завершится ошибкой, указанной выше.

Кто-нибудь знает, как это исправить?

Большое спасибо!

Обновление: я только что попытался использовать torch.nn.functional.mse_loss, что приведет к той же ошибке..


person bene    schedule 24.06.2018    source источник


Ответы (2)


У меня была такая же ошибка, когда я использую код ниже

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
person Steve H    schedule 21.01.2019
comment
У меня была такая же ошибка в другом контексте. Проблема также заключалась в том, что я пытался получить доступ к тензору с индексом, превышающим длину тензора. - person GR4; 16.08.2019

Вы используете графический процессор?

У меня была аналогичная проблема (но я использовал операции сбора), и когда я переместил свои тензоры в ЦП, я мог получить правильное сообщение об ошибке. Я исправил ошибку, переключился обратно на GPU, и все было в порядке. Возможно, у pytorch возникают проблемы с выводом правильной ошибки, когда она исходит изнутри графического процессора.

person NonoG    schedule 27.06.2018
comment
Нет, к сожалению, я запускаю свой код на процессоре. Кроме того, сейчас нет кода для переноса его на процессор - может ли это быть проблемой? - person bene; 27.06.2018