Pytorch(4)
-
torch.nn.CrossEntropyLoss()
만약 이중분류를 진행중이라면 torch.nn.BECLoss()를 사용하자. Multi-Class CrossEntropyLoss 1. input tensor에 대해서 각 row 별로 softmax() 진행(=각 class별 확률을 나타냄) 2. 각 row별로 softmax()가 진행된 값에 log를 취해줌 **1-2단계를 한번에 torch.nn.functional.log_softmax(x, dim=1) 로 구현할 수도 있다. 3. predict와 y의 element-wise product 진행. - 이때 y는 모든 class에 대한 one-hot encoding. - 즉, 각 row별 y class에 해당하는 probability만 남음. - 이때 2단계 진행 시 softmax의 결과는 1 이하이기 때문에..
2024.02.19 -
Pytorch "Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!" 에러 해결
# # GPU에서 추론하기 위해 weight도 cpu가 아니라 GPU에 올리기 위함 # if torch.cuda.is_available(): # model.cuda() 보통 이걸로 해결된다. 계산을 해야하는데 하나는 cpu에, 하나는 gpu에 있어서 발생하는 문제로, .cuda() 를 사용하여 텐서 모두 GPU로 올려주면 계산이 가능해진다. 이때 저장된 모델을 불러와서 추가 학습을 시킬 경우, optimizer에서 다음과 같은 에러가 연속적으로 발생하는데, model = Model() ... model = model.cuda() 이렇게 작성되있을꺼다. model = Model().cuda() 이렇게 한줄로 바꿔주면... 해결된다 https://thewayaboutme.tistory.com/384
2022.09.28 -
Pytorch 모델 저장하기(torach.save(model, PATH)), 모델 불러오기(torch.load(PATH)), 불러온 모델 이어서 학습하기
torch.save(model, PATH) # 모델 클래스는 어딘가에 반드시 선언되어 있어야 합니다 model = torch.load(PATH) model.eval() 이는 단순히 저장된 모델을 불러와서 prediction을 하기 위함이다. 모델을 저장할때는 모델말고도 파라미터, optimizer, loss등을 함께 저장할 수 있는데, 이 경우 확장자는 .tar 이다. torch.save({ 'epoch': epoch, 'model_state_dict': model.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), 'loss': loss, ... }, PATH) model = TheModelClass(*args, **kwargs) optimiz..
2022.09.28 -
Pytorch 'TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.' & AttributeError: 'list' object has no attribute 'cpu'
파이토치 쓰던 와중 'TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.' 라는 에러를 만나 x.numpy() 를 x.cpu().numpy()로 수정해준다. (이는 GPU에 할당되어 있는 tensor를 바로 배열로 바꾸지말고 cpu로 내린다음, cpu에서 변환 작업을 하라는 에러문구이다.) 그러면 또 AttributeError: 'list' object has no attribute 'cpu' 라는 에러가 발생한다. 아니 cpu로 내리래서 내렸더니 얘는 .cpu() 가 안된다고? 화가 가득난다 그래서 x의 type을 찍어본 결과 list 안에 원..
2022.09.27