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 поскольку графические процессоры не хороши двойной точности вычислений. Кроме того, плавающая точка достаточно хороша для глубокого обучения.