RuntimeError: Expected object of device type cuda but got device type cpu for argument #2 'mat1' in
21089 단어 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에서 끊어진 점 하나하나를 걷고, 어디에 문제가 있는지 보고, 프로그램을 진행할 수 없게 한다.쓸데없는 말이 좀 많으니 양해해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정확도에서 스케일링의 영향데이터셋 스케일링은 데이터 전처리의 주요 단계 중 하나이며, 데이터 변수의 범위를 줄이기 위해 수행됩니다. 이미지와 관련하여 가능한 최소-최대 값 범위는 항상 0-255이며, 이는 255가 최대값임을 의미합니다. 따...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.