Преобразование списка python в тензор Pytorch - PullRequest
0 голосов
/ 06 февраля 2020

У меня проблема с преобразованием списка чисел python в pytorch. Тензор: это мой код:

caption_feat = [int(x)  if x < 11660  else 3 for x in caption_feat]

печать caption_feat дает: [1, 9903, 7876, 9971, 2770, 2435, 10441, 9370, 2]
Я выполняю преобразование как это: tmp2 = torch.Tensor(caption_feat) теперь печать tmp2 дает: tensor([1.0000e+00, 9.9030e+03, 7.8760e+03, 9.9710e+03, 2.7700e+03, 2.4350e+03, 1.0441e+04, 9.3700e+03, 2.0000e+00])
Однако я ожидал получить: tensor([1. , 9903, , 9971. ......]) Любая идея?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2020

Попробуйте

torch.IntTensor (caption_feat)

Вы можете увидеть другие типы здесь https://pytorch.org/docs/stable/tensors.html

0 голосов
/ 29 апреля 2020

Простой вариант - преобразовать ваш список в массив numpy, указать желаемый dtype и вызвать torch.from_numpy в новом массиве.

Пример игрушки:

some_list = [1, 10, 100, 9999, 99999]
tensor = torch.from_numpy(np.array(some_list, dtype=np.int))

Другой вариант, предложенный другими, заключается в указании типа при создании тензора:

torch.tensor(some_list, dtype=torch.int)

Оба должны работать нормально.

0 голосов
/ 06 февраля 2020

Если все элементы являются целыми числами, вы можете сделать целочисленный тензор факела, определив dtype

>>> a_list = [1, 9903, 7876, 9971, 2770, 2435, 10441, 9370, 2]
>>> tmp2 = torch.tensor(a_list, dtype=torch.int)
>>> tmp2
tensor([    1,  9903,  7876,  9971,  2770,  2435, 10441,  9370,     2],
       dtype=torch.int32)

Пока torch.Tensor возвращает torch.float32, что сделало это напечатать номер в научном c обозначении

>>> tmp2 = torch.Tensor(a_list)
>>> tmp2
tensor([1.0000e+00, 9.9030e+03, 7.8760e+03, 9.9710e+03, 2.7700e+03, 2.4350e+03,
        1.0441e+04, 9.3700e+03, 2.0000e+00])
>>> tmp2.dtype
torch.float32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...