텐초님 책과 영상 잘 보고 있습니다. 모델 평가하는 부분에서 아래와 같이 타입에러 뜨시는 분은 다음과 같이 cpu로 텐서를 바꿔주시면 됩니다. 에러 내용: TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first. 수정 : 모델 평가 부분 pred = model(torch.unsqueeze(data.to(device), dim=0))>0.5 --> pred = model(torch.unsqueeze(data.to(device), dim=0)).cpu()>0.5 감사합니다.
텐초님. 모델 학습과정 손실 계산 부분 loss = nn.BCEWithLogitsLoss() 에서 ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128])) 이 에러가 나고 있습니다. 올려주신 소스 그대로 실행해보고 있습니다. 어떤 부분을 확인해봐야 할까요?
@@텐초 처음부터 나오는 것이 아니라 epoch1 loss:0.5439759492874146: 98%|█████████▊| 62/63 [02:31 8 loss = nn.BCEWithLogitsLoss()( 9 preds, 10 label.type(torch.FloatTensor).to(device)) # 손실 계산 11 loss.backward() # 오차 역전파 13 optim.step() # 최적화 File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs) 1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc] 1510 else: -> 1511 return self._call_impl(*args, **kwargs) File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs) 1515 # If we don't have any hooks, we want to skip the rest of the logic in 1516 # this function, and just call forward. 1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks 1518 or _global_backward_pre_hooks or _global_backward_hooks 1519 or _global_forward_hooks or _global_forward_pre_hooks): -> 1520 return forward_call(*args, **kwargs) 1522 try: 1523 result = None ... 3196 if not (target.size() == input.size()): -> 3197 raise ValueError(f"Target size ({target.size()}) must be the same as input size ({input.size()})") 3199 return torch.binary_cross_entropy_with_logits(input, target, weight, pos_weight, reduction_enum) ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128]))
@@텐초 처음부터 에러가 나는 거이 아니라 epoch1 loss:0.5439759492874146: 98%|█████████▊| 62/63 [02:31 8 loss = nn.BCEWithLogitsLoss()( 9 preds, 10 label.type(torch.FloatTensor).to(device)) # 손실 계산 11 loss.backward() # 오차 역전파 13 optim.step() # 최적화 File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs) 1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc] 1510 else: -> 1511 return self._call_impl(*args, **kwargs) File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs) 1515 # If we don't have any hooks, we want to skip the rest of the logic in 1516 # this function, and just call forward. 1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks 1518 or _global_backward_pre_hooks or _global_backward_hooks 1519 or _global_forward_hooks or _global_forward_pre_hooks): -> 1520 return forward_call(*args, **kwargs) 1522 try: 1523 result = None ... 3196 if not (target.size() == input.size()): -> 3197 raise ValueError(f"Target size ({target.size()}) must be the same as input size ({input.size()})") 3199 return torch.binary_cross_entropy_with_logits(input, target, weight, pos_weight, reduction_enum) ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128]))
@@텐초 확인 감사합니다.. 책에 나와있는대로, 출력채널은 1에서 3으로, softmax 추가, CELoss사용하도록 수정은 했습니다. 다만, Label 데이터를 0, 1이 아닌 3개의 classes를 가지도록 해야 할 것 같은데 preprocessmask부분을 어떻게 변경해야 될지 감이 안 옵니다. one-hot encoding 을 써야 될까요? 고견 부탁드립니다. 감사합니다.
안녕하세요. 재밌게 따라가고있는데, Unet의 모든 코드를 똑같이 해도 이런오류가발생하는데 해결방법을 아실까요? stack expects each tensor to be equal size, but got [3, 128, 128] at entry 0 and [1, 128, 128] at entry 28
안녕하세요. 클래스를 그대로 3개로 분류하게 코드를 다시 짜고 있는데 몇가지 의문이 있습니다. 모델의 torch.squeeze 부분과 preprocess 없애고 최종 채널을 3, bce를 ce로 바꾸긴 했는데 softmax 힘수를 코드의 어느부분에 적용시켜야 할지 잘 모르겠습니다... 그리고 파일을 열어보니까 레이블이 1 2 3 으로 되어 있던데 띠로 0 1 2로 안바꿔도 될까요??
@@텐초 스퀴즈를 안하면 RuntimeError: only batches of spatial targets supported (3D tensors) but got targets of size: : [32, 1, 128, 128] 요런 오류가 떠서요! label은 3차원으로 받아야 한다고 에러가 뜨는거 같습니다
텐초님 덕분에 파이토치랑 딥러닝 공부 입문을 정말 잘했습니다...! 앞으로도 더 많은 책 부탁드립니다. 도움 많이 받았습니다 감사합니다.
텐초님 책과 영상 잘 보고 있습니다.
모델 평가하는 부분에서 아래와 같이 타입에러 뜨시는 분은 다음과 같이 cpu로 텐서를 바꿔주시면 됩니다.
에러 내용:
TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
수정 :
모델 평가 부분
pred = model(torch.unsqueeze(data.to(device), dim=0))>0.5 --> pred = model(torch.unsqueeze(data.to(device), dim=0)).cpu()>0.5
감사합니다.
텐초님. 모델 학습과정 손실 계산 부분 loss = nn.BCEWithLogitsLoss() 에서 ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128])) 이 에러가 나고 있습니다. 올려주신 소스 그대로 실행해보고 있습니다. 어떤 부분을 확인해봐야 할까요?
모델 출력하고 데이터로더가 반환하는 정답의 모양이 일치하지 않는게 문제입니다
모델의 마지막출력 직전에 unsqueeze같은 함수로 배치 차원을 추가해주세요
근데 이상하네요
모델의 순전파쪽에서 squeeze를 해주고
데이터셋의 preprocess mask함수에서 채널정보를 지울테니
보통이라면 뜰수없는 에러입니다
코드에 오타가 없는지 확인해주세요
@@텐초 처음부터 나오는 것이 아니라 epoch1 loss:0.5439759492874146: 98%|█████████▊| 62/63 [02:31 8 loss = nn.BCEWithLogitsLoss()(
9 preds,
10 label.type(torch.FloatTensor).to(device)) # 손실 계산
11 loss.backward() # 오차 역전파
13 optim.step() # 최적화
File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
1510 else:
-> 1511 return self._call_impl(*args, **kwargs)
File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
1515 # If we don't have any hooks, we want to skip the rest of the logic in
1516 # this function, and just call forward.
1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1518 or _global_backward_pre_hooks or _global_backward_hooks
1519 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520 return forward_call(*args, **kwargs)
1522 try:
1523 result = None
...
3196 if not (target.size() == input.size()):
-> 3197 raise ValueError(f"Target size ({target.size()}) must be the same as input size ({input.size()})")
3199 return torch.binary_cross_entropy_with_logits(input, target, weight, pos_weight, reduction_enum)
ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128]))
@@텐초 처음부터 에러가 나는 거이 아니라 epoch1 loss:0.5439759492874146: 98%|█████████▊| 62/63 [02:31 8 loss = nn.BCEWithLogitsLoss()(
9 preds,
10 label.type(torch.FloatTensor).to(device)) # 손실 계산
11 loss.backward() # 오차 역전파
13 optim.step() # 최적화
File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
1510 else:
-> 1511 return self._call_impl(*args, **kwargs)
File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
1515 # If we don't have any hooks, we want to skip the rest of the logic in
1516 # this function, and just call forward.
1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1518 or _global_backward_pre_hooks or _global_backward_hooks
1519 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520 return forward_call(*args, **kwargs)
1522 try:
1523 result = None
...
3196 if not (target.size() == input.size()):
-> 3197 raise ValueError(f"Target size ({target.size()}) must be the same as input size ({input.size()})")
3199 return torch.binary_cross_entropy_with_logits(input, target, weight, pos_weight, reduction_enum)
ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128]))
안녕하세요. 책과 강의 잘 보고 있습니다.
혹시 이진 분류를 다중 분류로 변경하는 부분에 대해서 수정 코드를 알 수 있을까요?
연습 문제에 나와있는 정답을 참고해서 변경해보고 있는데,, 잘안되네요..
@@텐초 확인 감사합니다..
책에 나와있는대로, 출력채널은 1에서 3으로, softmax 추가, CELoss사용하도록 수정은 했습니다. 다만, Label 데이터를 0, 1이 아닌 3개의 classes를 가지도록 해야 할 것 같은데 preprocessmask부분을 어떻게 변경해야 될지 감이 안 옵니다.
one-hot encoding 을 써야 될까요?
고견 부탁드립니다.
감사합니다.
안녕하세요. 재밌게 따라가고있는데, Unet의 모든 코드를 똑같이 해도 이런오류가발생하는데 해결방법을 아실까요?
stack expects each tensor to be equal size, but got [3, 128, 128] at entry 0 and [1, 128, 128] at entry 28
@@텐초 책의 내용을 그대로 따라했는데 학습루프에서 같은 에러가 발생하네요
@@텐초 네 감사합니다.
하아... 하루종일 이 에러 찾다가 영상 생각나서 왔는데 관련 해결책이 있네요.
저는 텐초님 코드가 작동이 않되서 어찌 저찌 찾았습니다.
아래 파일들이 32bit(4채널), 8bit(1채널) jpg라 차원이 안맞게 되나봅니다. 참고하시기 바랍니다.
(흑백이야 그렇다치고... 왜 jpg따위에 32bit로 저장을 하는지. ㅠ_ㅠ, 옥스포드 놈들도 밉네요. 기왕에 뿌릴거 정리 좀 더 해주지.. 쩝)
./data/oxford/images\Abyssinian_34.jpg (202, 250)
./data/oxford/images\Abyssinian_5.jpg (150, 200, 4)
./data/oxford/images\Egyptian_Mau_129.jpg (325, 299)
./data/oxford/images\Egyptian_Mau_139.jpg (250, 350)
./data/oxford/images\Egyptian_Mau_14.jpg (800, 582, 4)
./data/oxford/images\Egyptian_Mau_145.jpg (188, 216)
./data/oxford/images\Egyptian_Mau_167.jpg (275, 183)
./data/oxford/images\Egyptian_Mau_177.jpg (175, 246)
./data/oxford/images\Egyptian_Mau_186.jpg (275, 183, 4)
./data/oxford/images\Egyptian_Mau_191.jpg (214, 300)
./data/oxford/images\staffordshire_bull_terrier_2.jpg (282, 500)
./data/oxford/images\staffordshire_bull_terrier_22.jpg (500, 364)
이상하게 여기에 코드를 2번이나 올렸는데 사라지내요.. 데이터도 잘 불러와지는데 머때문에 오류가생기는지 잘모르겠어요
마지막 학습부분에서 오류가발생합니다.
안녕하세요. 클래스를 그대로 3개로 분류하게 코드를 다시 짜고 있는데 몇가지 의문이 있습니다.
모델의 torch.squeeze 부분과 preprocess 없애고 최종 채널을 3, bce를 ce로 바꾸긴 했는데 softmax 힘수를 코드의 어느부분에 적용시켜야 할지 잘 모르겠습니다...
그리고 파일을 열어보니까 레이블이 1 2 3 으로 되어 있던데 띠로 0 1 2로 안바꿔도 될까요??
@@텐초 계속 런타임 에러 CUDA error: device-side assert triggered 라고 뜨는데 이유를 모르겠네요 ㅠㅠ
@@텐초 preprocess_mask를 지우고 np.squeeze(label) 하니까 오류 없이 학습이 진행됩니다!! 그런데 loss가 아예 0이 되어 버리네요..
@@텐초 스퀴즈를 안하면 RuntimeError: only batches of spatial targets supported (3D tensors) but got targets of size: : [32, 1, 128, 128] 요런 오류가 떠서요! label은 3차원으로 받아야 한다고 에러가 뜨는거 같습니다
조금 늦었지만 해결이 됐습니다!! 제가 짠 코드가 맞는건진 모르겠지만 일단 돌아가고 결과도 나오네요 정말 감사합니다!!