RuntimeError: Expected object of device type cuda but got device type cpu for argument #2 'mat1' in

21089 단어 pytorch
이것은 내가pytorch를 처음 사용했을 때 만났던 문제로, 초보자에게는 한 시간 넘게 나를 괴롭혔다.

제가 쓰는 피캠.


해결 방법: Google에는 다음과 같은 블로그가 있습니다.모델이 CUDA에 배치되었는지 여부model = model. to(device) model = model. cuda(device);2. CUDA에 데이터를 올렸는지 여부data = data. to(device) data = data. cuda(device).3.3.모형 내부에 새로 지은 장량을 CUDA에 올렸는지p = torch. tensor([1]).to(device) p = torch. tensor([1]). cuda(device)에 대해 솔직히 말하면 여기 있는 것을 보면 기본적으로 문제지만 저는 초보라서 어떻게 사용하는지 전혀 몰라요. 마지막에 더듬어 보면 알 수 있어요. 아래 코드를 보세요.
# -*- coding: utf-8 -*-
import torch
import numpy as np
from torch import nn
from torch.autograd import Variable
import matplotlib.pyplot as plt

# create dataset

y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573],
                    [3.366], [2.596], [2.53], [1.221], [2.827],
                    [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)

x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],
                    [9.779], [6.182], [7.59], [2.167], [7.042], [10.791],
                    [5.313], [7.997], [3.1]], dtype=np.float32)
# print(x_train, '
', y_train)
# create tensor by numpy type x_train = torch.from_numpy(x_train) y_train = torch.from_numpy(y_train) # create a modul class LinearRegression(nn.Module): def __init__(self): super(LinearRegression, self).__init__() # super: , self.Linear = nn.Linear(1, 1) # input and output is 1 dimesion def forward(self, x): out = self.Linear(x) return out if torch.cuda.is_available(): model = LinearRegression().cuda() # GPU else: model = LinearRegression() # https://blog.csdn.net/shanglianlm/article/details/85019768 criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=1e-3, momentum=0.9) # num_epochs = 1000 for epoch in range(num_epochs): if torch.cuda.is_available(): inputs = Variable(x_train).cuda() target = Variable(y_train).cuda() else: inputs = Variable(x_train) target = Variable(y_train) # out = model(inputs) loss = criterion(out, target) # backward optimizer.zero_grad() loss.backward() optimizer.step() # update parameters if (epoch+1) % 20 == 0: print('Epoch[{}/{}], loss:{:.6f}'.format(epoch+1, num_epochs, loss.item())) # show the module result model.eval() # predict = model(Variable(x_train.cuda())) predict = model(Variable(x_train)) predict = predict.data.cpu().numpy() plt.plot(x_train.numpy(), y_train.numpy(), 'ro', label='Original data') plt.plot(x_train.numpy(), predict, label='Fitting Line') plt.show()

오류:
Traceback (most recent call last):
  File "D:/pycharm/pytorch/torch_learning/ .py", line 69, in <module>
    predict = model(Variable(x_train))
  File "D:\dev\envs\pytorch\lib\site-packages\torch
n\modules\module.py"
, line 532, in __call__ result = self.forward(*input, **kwargs) File "D:/pycharm/pytorch/torch_learning/ .py", line 32, in forward out = self.Linear(x) File "D:\dev\envs\pytorch\lib\site-packages\torch
n\modules\module.py"
, line 532, in __call__ result = self.forward(*input, **kwargs) File "D:\dev\envs\pytorch\lib\site-packages\torch
n\modules\linear.py"
, line 87, in forward return F.linear(input, self.weight, self.bias) File "D:\dev\envs\pytorch\lib\site-packages\torch
n\functional.py"
, line 1370, in linear ret = torch.addmm(bias, input, weight.t()) RuntimeError: Expected object of device type cuda but got device type cpu for argument #2 'mat1' in call to _th_addmm Process finished with exit code 1

마지막 줄의 오류는 필요한 대상은cuda 형식이지만 사용자가 준 확실한 CPU 형식이라는 뜻이다.오류는 32줄에 문제가 있음을 나타낸다. 문제는 위에서 말한 세 번째이다. 데이터는 gpu에 놓여 있지 않다. 코드를 보십시오. # predict = model(Variable(x_train.cuda())) predict = model(Variable(x_train)) 두 번째 줄은 데이터를 GPU에 넣지 않고 x_train 뒤에 추가한 것이다.cuda(), 문제가 해결되었습니다.우리가 이런 상황을 만났을 때,pycharm에서 끊어진 점 하나하나를 걷고, 어디에 문제가 있는지 보고, 프로그램을 진행할 수 없게 한다.쓸데없는 말이 좀 많으니 양해해 주십시오.

좋은 웹페이지 즐겨찾기