Ожидайте FloatTensors, но получите LongTensors в MNIST-подобной задаче - PullRequest
0 голосов
/ 08 января 2019

Я выполняю задачу, похожую на MNIST, входные данные представляют собой изображения 10 классов, а ожидаемый результат представляет собой прогнозируемый класс изображений.

Но теперь output похож на [-2.3274, -2.2723, ...], длина которого равна batch_size. И target это [4., 2., 2., 8., ...]

Error message: RuntimeError: ожидаемый объект для скалярного типа Long, но получил плавающее скалярного типа для аргумента # 2 'target'

class Net(nn.Module):
    ...
    ...
    def forward(self, x):
        ...
        ...
        return F.log_softmax(x, dim = 1)


criterion = torch.nn.NLLLoss()

Может кто-нибудь дать мне совет? Спасибо.

1 Ответ

0 голосов
/ 08 января 2019

Полученная ошибка относится к аргументу second (# 2) о потере: target.
NLLLoss ожидает (для каждого элемента) наличие float вектора вероятностей и одной long (то есть целочисленной) цели на элемент.
В вашем случае ваши «целевые» значения [4., 2., 2., 8., ...] имеют тип float . вам нужно конвертировать вашу цель в long:

target = target.to(dtype=torch.long)
...