Получение ошибки при попытке сжечь список тензоров - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь заставить cuda работать, но мне нужно изменить свой тренировочный вклад в тензор. Когда я пытался это сделать, я получал сообщение об ошибке, когда пытался объединить список тензоров в один тензор.

Код

for epoch in:
        alst = []
        for x, y in loader:
            x = torch.stack(x)
            #x = torch.Tensor(x)
            #x = torch.stack(x).to(device,dtype=float)

Форма x: Список тензоров

[tensor([[[0.325],
     [ 0.1257],
     [ 0.1149],
     ...,
     [-1.572],
     [-1.265],
     [-3.574]],
]), tensor([1,2,3,4,5]), tensor(6,5,4,3,2])]

Ошибка, которую я получил

     22             alst = []
     23             for x, y in loader:
---> 24                 x_list = torch.stack(x)
     25 #                 x = torch.Tensor(x)
     26 #                 x = torch.stack(x).to(device,dtype=float)

RuntimeError: Expected object of scalar type Float but got scalar type Long for sequence element 1 in sequence argument at position #1 'tensors'

Не уверен, что я делаю неправильно. Я тоже попробовал x = torch.stack(x).to(device,dtype=float), но все равно не получилось.

1 Ответ

1 голос
/ 25 марта 2020

Первый тензор в выходных данных имеет тип float со значениями для ввода в вашу сеть, второй выглядит как метки (типа long).

Кроме того, первый - tensor, а второй - и третий элемент - vectors (с элементами 6 и 9 соответственно).

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

Распакуйте ваш x через

matrix, vector1, vector2 = x

Чтобы удалить type с предупреждениями vector1 и vector2 на float через

vector1 = vector1.float()

Проверьте их формы с помощью .shape атрибут и действовать соответственно. Возможно, у вас уже есть пакеты данных, которые вы используете train_loader. См. Документация DataLoader для получения дополнительной информации и проверки, используете ли вы один.

...