python에서 pytorch 사용 중 tensor 차원 오류 질문 드립니다.

조회수 555회

이제 막 python을 배워 pytorch를 연습중입니다.

pytorch를 이용해서 GPU에서 선형 회귀를 하는 단순 코드를 테스트중인데

'both arguments to matmul need to be at least 1D, but they are 0D and 2D'라는 에러를

직면한 후 더이상의 진전이 없어, 고민하다 질문글에 글 올립니다.

여러분의 수 많은 경험을 통해 제 문제에 답변 주셔서

제게 귀중한 경험을 공유해 주시길 간절히 부탁드립니다.

감사합니다.

import torch

import torch.nn as nn

import torch.nn.functional as F

import torch.optim as optim

learning_rate=0.001

device=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

class Neural(nn.Module):
    def __init__(self):
        super(Neural, self).__init__()
        self.fc1=nn.Linear(1,10)
        self.fc2=nn.Linear(10,1)

        self.optimizer=optim.Adam(self.parameters(),lr=learning_rate)

        self.device=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

        self.to(self.device)

    def forward(self,x):
        x=F.relu(self.fc1(x))
        x=self.fc2(x)
        return x

    def train_net(self,X,Y):
        y_pred=self.forward(X)

        loss=MSE((y_pred-Y)**2)

        self.optimizer.zero_grad()
        loss.backward()
        self.optimizer.step()

model=Neural()

X=torch.tensor([1,2,3,4,5,6], dtype=torch.float).to(device)
Y=torch.tensor([3,6,9,12,15,18], dtype=torch.float).to(device)
print(X[1])
model.forward(X[1])
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • neural net 연산은 결국 matrix multiplication인데, 각 차원이 맞지 않으면 수행할 수 없습니다.

    forward할 때 X[1]을 전달한 것이 문제가 된 것으로 보입니다.

    X=torch.tensor([[1,2,3,4,5,6]], dtype=torch.float).to(device)
    

    X를 이렇게 선언해서 X[1] 대신 X를 전달해보세요

    덧붙여서 pytorch에서 forward 함수는 model.forward(X) 대신 model(X)로도 동작합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)