поскольку графические процессоры не хороши в вычислениях двойной точности. Кроме того, с плавающей точкой достаточно для глубокого обучения.
я есть 2 массива, которые я конвертирую в тензоры, чтобы использовать объект 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
Я получаю следующую ошибку:
Ошибка типа: addmm_ получил недопустимую комбинацию аргументов - получил (int, int, torch. DoubleTensor, torch.FloatTensor), но ожидал один из: [...]
* (плавающая бета, плавающая альфа, torch. DoubleTensor mat1, torch.DoubleTensor mat2) не совпадают, потому что некоторые аргументы имеют недопустимые типы: (int, int, torch.DoubleTensor, torch.FloatTensor)
* (плавающая бета, плавающая альфа, torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2) не совпадают, поскольку некоторые аргументы имеют недопустимые типы: (int, int, torch.DoubleTensor, torch.FloatTensor)
Последняя ошибка происходит от:
output.addmm_ (0, 1, input, weight.t ())
Как вы видите из моего кода, я попытался преобразовать тензор с помощью .double () - но это не сработало. Почему он преобразует один массив в объект FloatTensor, а другой - в DoubleTensor? Есть идеи?