반응형

파이토치 22

[Pytorch] 파이토치 허브(torch.hub) 사용법

파이토치 허브 메소드 정리, 사용 예제 Pytorch에서 github repository 등의 위치에 구현되어 있는 ResNet 등의 pre-train된 모델을 쉽게 불러올 수 있는 hub 기능에 대하여 구현된 함수들의 종류를 살펴보고 간단한 사용 예제들에 대하여 다루어 보겠습니다. torch.hub의 더 상세한 사용법이 궁금하시다면 아래 링크의 공식 사이트를 참고해주세요. (해당 포스팅도 해당 공식 글의 내용을 참조하여 작성되었습니다.) torch.hub — PyTorch 1.12 documentation torch.hub Pytorch Hub is a pre-trained model repository designed to facilitate research reproducibility. Publis..

Python/Pytorch 2022.07.28

RuntimeError: expected scalar type Long but found Float / RuntimeError: "log_softmax_lastdim_kernel_impl" not implemented for 'Long' 해결

파이토치 자료형 관련 오류 디버깅 Pytorch 사용 중 자료형 타입과 관련하여 발생할 수 있는 에러 종류 2가지에 대하여 원인 및 해결법을 간단히 정리해보도록 하겠습니다. 1. RuntimeError: expected scalar type Long but found Float 해당 오류는 정수형 타입 중 하나인 long 타입으로 구현되어야 하는 함수에게 float와 같이 다른 자료형의 텐서가 주어질 때 발생할 수 있는 오류입니다. 예를 들어, 다음과 같이 nn.CrossEntropyLoss 함수를 적용하는 간단한 상황을 살펴보겠습니다. import torch import torch.nn as nn X = torch.tensor([[1, 2, 0], [1, 0, 1]]).float() # 데이터 부분 :..

Python/Debugging 2022.07.23

[Pytorch] 체크포인트(checkpoint) 설명, 저장 및 불러오기 예제(epoch별, step별, best)

파이썬 파이토치 체크포인트 사용법 python torch 모듈에서 학습된 모델의 저장 및 불러오기 과정에서 자주 보이는 체크포인트(checkpoint) 개념에 대하여 정리해보고 epoch별, step별, best 등의 체크포인트를 직접 지정하여 저장 및 불러오기를 해보는 예시를 다루어보겠습니다. 파이토치에서 체크포인트란? 파이토치의 checkpoint는 학습 중인 모델의 특정 시점의 상태를 보존하여 저장했다가 그대로 불러와 이어서 학습하거나 혹은 evaluation을 수행할 수 있게 해주는 파일을 의미합니다. 사실, 체크포인트라는 말은 따로 용어가 있다고 하기보다는 아래 글의 모델의 저장 및 불러오기 과정과 거의 일치한다고 보셔도 됩니다. [Pytorch] 파이토치 모델 저장, 불러오기 방법 torch ..

Python/Pytorch 2022.07.18

[Pytorch] 파이썬 파이토치 데이터 병렬 처리 적용 예제 : nn.DataParallel

Python torch data parallelism 사용법 파이토치에서 데이터 병렬 처리를 적용하는 방법에 대한 예제를 살펴보도록 하겠습니다. 해당 글은 아래 링크의 파이토치 공식 사이트의 글을 기반으로 작성되었으며, 좀 더 자세한 설명이 필요하시다면 해당 글을 참고해주세요. 선택 사항: 데이터 병렬 처리 (Data Parallelism) 글쓴이: Sung Kim and Jenny Kang 번역: ‘정아진 ’ 이 튜토리얼에서는 DataParallel(데이터 병렬) 을 사용하여 여러 GPU를 사용하는 법을 배우겠습니다. PyTorch를 통해 GPU를 사용하는 tutorials.pytorch.kr 상황 가정 우선, 아래와 같이 파라미터 수가 많은 네트워..

Python/Pytorch 2022.07.14

파이토치에서 모델 학습이 되지 않는 경우 원인 정리(파라미터가 그대로인 경우)

Pytorch gradient가 흐르지 않는 경우 원인과 해결법 파이토치 모듈을 이용하여 모델을 학습하는 과정에서 train 과정이 진행되는 것처럼 보여도 실제로는 파라미터가 업데이트되지 않고 학습이 안되는 경우가 있습니다. 이번 글에서는 제가 겪었던 원인을 바탕으로 모델 학습이 되지 않을 때 의심할만한 원인 3가지 정도를 간략하게 정리해보도록 하겠습니다. 1. 모델의 layer freeze 여부 체크 모델의 각 layer의 requires_grad 속성을 확인하여 해당 값이 True로 설정되어있는지를 확인해야 합니다. 이를 확인할 수 있는 방법의 코드는 아래와 같습니다. # 각 layer의 requires_grad가 True인지 확인 for param in model.parameters(): print..

Python/Debugging 2022.05.17

[Pytorch] 모델에 저장된 파라미터 확인, 출력 방법

파이토치에서 파라미터 값 보는법 파이토치에서 모델에 저장된 parameter의 값들을 확인하는 방법들을 살펴보겠습니다. 파라미터만 출력 : model.parameters() 이용 layer 순서대로 파라미터를 출력하려면 선언된 모델의 parameters()를 호출하여 아래와 같이 순회해주시면 됩니다. for param in model.parameters(): print(param) 각 layer에 저장된 weight와 bias 값들이 차례대로 잘 출력되는 것을 볼 수 있었습니다. layer 이름과 같이 출력 : model.named_children() 이용 만일, layer의 이름과 매칭하여 저장된 파라미터를 확인하고 싶은 경우에는 아래와 같이 named_children()을 호출하여 layer 이름과 ..

Python/Pytorch 2022.05.13

[Pytorch] DataLoader의 기능과 사용법 정리

파이썬 파이토치 DataLoader 이해하기 파이토치 모듈에서 모델 학습 과정 시 각 step 마다 데이터를 batch size 크기로 분할하여 넣어 효과적이고 효율적인 학습 진행을 돕는 dataloader의 기능을 이해해보고 사용법 예시 코드를 쉽고 간략하게 정리해보도록 하겠습니다. DataLoader의 기능, 사용 이유 이해를 돕기 위하여 x, y 두 벡터를 input으로 받는 모델을 학습하려는 상황을 가정해보겠습니다. 그리고 아래와 같이 1000개의 데이터가 있다고 생각해보도록 하겠습니다. # 다음과 같은 형태로 데이터가 존재한다고 가정 data = [[x1, y1], [x2, y2], [x3, y3], ... , [x1000, y1000]] 이제 이 데이터를 통하여 모델을 학습하려면 어떤 형태로 ..

Python/Pytorch 2022.05.10

[Pytorch] GPU 여부 확인, 사용할 GPU 번호 지정, 모델 및 텐서에 GPU 할당 방법

파이토치 GPU 체크, 지정 및 할당 방법 정리 파이토치에서 GPU 사용 가능 여부 및 연결된 GPU 정보를 확인해보고 특정 GPU만 사용하도록 설정하는 방법과 모델 및 텐서에 원하는 GPU를 할당할 수 있는 방법에 대하여 정리해보도록 하겠습니다. GPU 사용 가능 여부 확인 아래의 명령어의 결과가 True로 반환되면 GPU가 연결되어 사용 가능하다는 의미입니다. import torch # GPU 사용 가능 -> True, GPU 사용 불가 -> False print(torch.cuda.is_available()) 다음과 같이 코드를 작성하면 GPU 여부에 따라서 사용할 디바이스 종류 자동 지정이 가능합니다. # GPU 사용 가능 -> 가장 빠른 번호 GPU, GPU 사용 불가 -> CPU 자동 지정 예..

Python/Pytorch 2022.04.24

파이토치 RuntimeError: grad can be implicitly created only for scalar outputs 해결법

Pytorch loss.backward() 과정 에러 디버깅 파이토치에서 모델 학습 과정 내 backporpagation을 시도하는 도중, RuntimeError: grad can be implicitly created only for scalar outputs 라는 오류 메시지가 출력되었습니다. loss.backward() # 여기서 오류 발생 오류 원인 loss.backward() 과정은 기본적으로 1개의 스칼라 데이터에 대한 역전파를 수행합니다. 그러나, loss 변수 내에는 배치 내 데이터 각각에 대한 손실 함수 점수들이 벡터 형태로 저장된 점을 확인했습니다.(아래는 3개의 데이터에 대한 loss 점수 예시입니다.) print(loss) # tensor([1.5054, 1.3475, 1.0413]..

Python/Debugging 2022.04.23

[Pytorch] 파이토치 특정 layer freeze 방법

파이토치 일부 layer의 파라미터만 freeze하기 파이토치에서 학습을 진행할 때, 특정 layer를 freeze하는 방법을 말씀드려보겠습니다. 이해를 돕기 위해 아래와 같은 매우 간단한 신경망이 있다고 가정해보겠습니다. import torch.nn as nn class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(8, 4) self.fc2 = nn.Linear(4, 2) self.fc3 = nn.Linear(2, 1) def forward(self, x): return self.fc3(self.fc2(self.fc1(x))) my_net = Net() 예를 들어, 위의 신경망에서 fc2에 해당하..

Python/Pytorch 2022.04.22
반응형