#python #pytorch
#питон #пыторч
Вопрос:
Я встречаю очень странный вопрос. В настоящее время я использую Colab для запуска модели ResNet50 в fashion-MNIST. В основной функции я четко ввел данные и вес в Cuda, и я дважды проверил это, распечатав устройство параметров и данных. В результате все они находятся на уровне cuda:0. Однако у меня все еще есть ошибка «Тип ввода (факел.Поплавковый) и тип веса (факел.cuda.FloatTensor) должно быть одинаковым или вход должен быть тензором MKLDNN, а вес-плотным тензором» в строке y_hat = net(x)
Это просто так странно, и в этом нет никакого смысла 🙁
Я ввел код, как показано ниже, надеюсь получить некоторую помощь 🙂
batch_size = 64 epoch = 100 lamda = 0.001 dropout_rate = 0.5 learning_rate = 0.01 train_iter, test_iter = load_data_fashion_mnist(batch_size, resize = 224) net = ResNet50().cuda() optimizer = torch.optim.SGD(params = net.parameters(), lr=learning_rate) loss = nn.CrossEntropyLoss() print(f'The model is {str(net)}') for i in range(epoch): print(f'Epoch: {i}') train_loss_value = 0. train_accuracy_value = 0. for x, y in train_iter: optimizer.zero_grad() x, y = x.cuda(), y.cuda() print(x.device) print(y.device) y_hat = net(x) loss_value = loss(y_hat, y) train_loss_value = loss_value train_accuracy_value = accuracy(y_hat, y) loss_value.backward() optimizer.step() print(f'train_acc: {train_accuracy_value / len(train_iter)}, train_loss: {train_loss_value / len(train_iter)}') accuracy_value = 0. test_loss_value = 0. #net.eval() with torch.no_grad(): for X, y in test_iter: X, y = X.cuda(), y.cuda() y_hat = net(X) #, kernel, bias) accuracy_value = accuracy(y_hat, y) test_loss_value = loss(y_hat, y) print(f'test_acc: {accuracy_value / len(test_iter)}, test_loss: {test_loss_value / len(test_iter)}') print('----------------------')