Безопасно ли всегда использовать torch.tensor или torch.FloatTensor? Или мне нужно лечить Интс с осторожностью? - PullRequest
0 голосов
/ 21 апреля 2020

https://pytorch.org/docs/stable/tensors.html

Я пытаюсь понять разницу между tensor, FloatTensor, IntTensor - и мне интересно, могу ли я просто всегда придерживаться tensor. .. или, может быть, FloatTensor.

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

{integers:labels, floats:continuous, one-hot-encoded:categoricals}

Нужно ли явно указывать каждый из них как виды переменные как разные типы тензоров? Будут ли они все работать как поплавки? Будут ли они работать в сочетании друг с другом?


Не доставит ли это мне неприятности вниз по течению?

l_o_l = [[1,2,3],[1,2,3],[1,2,3]]

int_tnz = th.FloatTensor(l_o_l)
int_tnz

тензор ([[1., 2., 3.], [ 1., 2., 3.], [1., 2., 3.]])

int_tnz.dtype

torch.float32


l_o_fl = [[1.1,2.2,3.3],[1.1,2.2,3.3],[1.1,2.2,3.3]]

int_tnz = th.tensor(l_o_fl)
int_tnz

тензор ([[ 1.1000, 2.2000, 3.3000], [1.1000, 2.2000, 3.3000], [1.1000, 2.2000, 3.3000]])

int_tnz.dtype

torch.float32

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

CrossEntropyLoss (или NLLLoss) ожидают, что тип target будет Long. Например, приведенный ниже код вызывает RuntimeError:

import torch.nn 

criterion = torch.nn.CrossEntropyLoss()

predicted = torch.rand(10, 10, dtype=torch.float)
target = torch.rand(10) #.to(torch.long)
criterion(predicted, target)
# RuntimeError: expected scalar type Long but found Float

. Вам нужно раскомментировать преобразование, чтобы оно заработало. Я не могу думать о более крупной проблеме, но зачем вообще конвертировать целые числа в число с плавающей точкой?

Что касается использования torch.tensor и torch.FloatTensor, я предпочитаю первое. torch.FloatTensor представляется устаревшим конструктором, и он не принимает device в качестве аргумента. Опять же, я не думаю, что это большая проблема, но все же использование torch.tensor повышает читабельность кода.

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

Невозможно усреднить целочисленные тензоры.

a = th.tensor([1,1])
b = th.tensor([2,2])

th.mean(th.stack([a,b]))

RuntimeError: Can only calculate the mean of floating types. Got Long instead.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...