Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

84page code 2-15 #8

Open
Kwon-Min-Jeong opened this issue Feb 14, 2024 · 1 comment
Open

84page code 2-15 #8

Kwon-Min-Jeong opened this issue Feb 14, 2024 · 1 comment

Comments

@Kwon-Min-Jeong
Copy link

test_outputs = test_outputs.to(device=device, dtype=torch.int64)
with torch.no_grad():
y_val = model(categorical_test_data)
loss = loss_function(y_val, test_outputs)
print(f'Loss: {loss:8f}')

여기서 y_val = model(categorical_test_data) 부분에 device 지정을 해줘야 하지 않나요( y_val = model(categorical_test_data).to(device))
앞서 train 단계에서 지정된 device가 test에서 사용된 device와 달라 오류가 발생합니다

RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument target in method wrapper_CUDA_nll_loss_forward)

또한 train 과정에서는 model에 device 지정한 부분이 존재합니다.
epochs = 500
aggregated_losses = []
train_outputs = train_outputs.to(device=device, dtype=torch.int64)
for i in range(epochs):
i += 1
y_pred = model(categorical_train_data).to(device) ## 해당 부분
single_loss = loss_function(y_pred, train_outputs)
aggregated_losses.append(single_loss)

책 정말 잘 공부하고 있습니다.
좋은 책 집필 감사합니다.

@Kwon-Min-Jeong
Copy link
Author

Kwon-Min-Jeong commented Feb 14, 2024

추가로 문의 드립니다.
책에서 아래와 같이 코드가 작성되어있는데
y_val = np.argmax(y_val, axis=1)
print(y_val[:5])
앞서 코드에서 tensor로 연산했기 때문에 np.argmax를 사용하면 아래와 같은 오류가 발생합니다.
TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
이에 tensor를 numpy 배열로 변경하는 과정이 필요할 것 같습니다.

y_val = y_val.cpu().numpy()
y_val = np.argmax(y_val, axis=1)
print(y_val[:5])

이후 평가 매트릭스에서도
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
print(confusion_matrix(test_outputs.cpu().numpy(), y_val))
print(classification_report(test_outputs.cpu().numpy(), y_val))
print(accuracy_score(test_outputs.cpu().numpy(), y_val))
과정이 추가되어야 정상 작동합니다.

실습 환경에 차이 때문에 발생하는 오류일 수도 있을 거 같아 여쭙습니다.
읽어주셔서 감사합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant