Pytorch: преобразование FloatTensor в Дуплетенсор
у меня есть 2 массива numpy, которые я преобразую в тензоры для использования объекта TensorDataset.
import torch.utils.data as data_utils
X = np.zeros((100,30))
Y = np.zeros((100,30))
train = data_utils.TensorDataset(torch.from_numpy(X).double(), torch.from_numpy(Y))
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True)
когда я делаю:
for batch_idx, (data, target) in enumerate(train_loader):
data, target = Variable(data), Variable(target)
optimizer.zero_grad()
output = model(data) # error occurs here
Я получаю ошибку следующую:
TypeError: addmm_ получил недопустимую комбинацию аргументов-got (int, int, torch.Дублетенсор, факел.FloatTensor), но ожидается, что одним из: [...]
* (float beta, float alpha, факел.Дублетенсор mat1, факел.Дублетенсор mat2) не совпало, потому что некоторые из аргументы имеют недопустимые типы: (int, int, torch.Дублетенсор, факел.FloatTensor)
* (float beta, float alpha, факел.SparseDoubleTensor mat1, факел.Дублетенсор mat2) не совпало, потому что некоторые из аргументов имеют недопустимые типы: (int, int, torch.Дублетенсор, факел.FloatTensor)
последняя ошибка происходит от:
выход.addmm_ (0, 1, вход, вес.t ())
Как вы видите в моем коде я пытался преобразования тензор с помощью .двойной() - но это не сработало. Почему он бросает один массив в объект FloatTensor, а другой-в Дуплетенсор? Есть идеи?
2 ответов
код numpy
массивы 64-bit floating point
и будет преобразован в torch.DoubleTensor
стандартно. Теперь, если вы используете их с вашей моделью, вам нужно убедиться, что ваши параметры модели также Double
. Или вам нужно убедиться, что ваш numpy
массивы отданных, как Float
, потому что параметры модели стандартно приведены как float
.
следовательно, выполнить одно из следующих действий:
data_utils.TensorDataset(torch.from_numpy(X).float(), torch.from_numpy(Y).float())
или же:
model.double()
Depeding, если вы хотите бросить вашу модель параметры, входы и цели as Float
или Double
.
это потому, что в PyTorch вы не можете выполнять операции между тензорами разных типов. Ваш data
is DoubleTensor
, но параметром модели являются FloatTensor
. Таким образом, вы получаете это сообщение об ошибке. Как сказал @mexmex, convert data
до FloatTensor
чтобы он соответствовал типу параметра модели.
не делайте наоборот! попытка преобразовать модель в двойную сильно обескуражена разработчиками PyTorch поскольку графические процессоры не хороши двойной точности вычислений. Кроме того, плавающая точка достаточно хороша для глубокого обучения.