JaeniWorld

[딥러닝,Pytoch] Dimension out of range (expected to be in range of [-1, 0], but got 1) - softmax dimension error 본문

프로그래밍/DeepLearning

[딥러닝,Pytoch] Dimension out of range (expected to be in range of [-1, 0], but got 1) - softmax dimension error

jaeni 2020. 7. 30. 19:48
반응형

CrossEntropyLoss를 사용 할 때 차원이 맞지 않는다고 에러가 났었다.

loss_function = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(),lr=learning_rate)
loss_list = []

for epoch in range(num_epochs):
    for f,l in list(zip(X_train,y_train)):
        preds = model(f) #Fully Connected Network
        loss = loss_function(preds,l)

처음 코드는 이러한 형태였는데. 이 상태로 preds와 l의 size를 찍어보면

preds는 torch.Size([3]) / l은 torch.Size([])의 형태였다. 

 

그래서 reshape 함수를 사용해

for epoch in range(num_epochs):
    for f,l in list(zip(X_train,y_train)):
        preds = model(f).reshape(1,3)
        l = l.reshape(1)
        loss = loss_function(preds,l)

이와 같이 각각의 size를 바꿔주었다.

이렇게 reshape를 활용해 바꾸고 다시 shape를 출력하면

torch.Size([1, 3]) torch.Size([1])와 같이 변하여 출력된다.

 

 

** 나같은 경우는 l이 int라서 에러가 떴는데 이는 l뒤에 .long()을 붙여주면 해결된다.

반응형
Comments