Pytorch ожидал тип Long, но получил тип int - PullRequest
1 голос
/ 31 мая 2019

Я восстановил ошибку

 Expected object of scalar type Long but got scalar type Int for argument #3 'index'

Это из этой строки.

targets = torch.zeros(log_probs.size()).scatter_(1, targets.unsqueeze(1).data.cpu(), 1)

Я не уверен, что делать, поскольку я пытался преобразовать это в длинный, используя несколько мест,Я попытался поставить

.long

в конце, а также установить dtype на torch.long, который все еще не работал.

Очень похоже на это, но он не сделалчто-нибудь, чтобы получить ответ «Ожидается, что долго, но получил Int» при запуске сценария PyTorch

Я изменил большую часть кода, и вот мое последнее представление, но теперь он дает мне то же самоевыпуск.

    def forward(self, inputs, targets):
            """
            Args:
                inputs: prediction matrix (before softmax) with shape (batch_size, num_classes)
                targets: ground truth labels with shape (num_classes)
            """
            log_probs = self.logsoftmax(inputs)
            targets = torch.zeros(log_probs.size()).scatter_(1, targets.unsqueeze(1).data.cpu(), 1)
            if self.use_gpu: targets = targets.to(torch.device('cuda'))
            targets = (1 - self.epsilon) * targets + self.epsilon / self.num_classes
            loss = (- targets * log_probs).mean(0).sum()
            return loss

1 Ответ

1 голос
/ 01 июня 2019

Тип аргумента вашего индекса (т. Е. targets.unsqueeze(1).data.cpu()) должен быть torch.int64.

(Сообщение об ошибке немного сбивает с толку: torch.long не существует. Но "Long" во внутренностях PyTorch означает int64).

...