본문 바로가기

Python/PyTorch

(13)
[Pytroch] Check point 저장하고 불러오기 추론(inference) 또는 학습(training)의 재개를 위해 체크포인트(checkpoint) 모델을 저장하고 불러오는 것은 마지막으로 중단했던 부분을 선택하는데 도움을 줄 수 있다. 체크포인트를 저장할 때는 단순히 모델의 state_dict 이상의 것을 저장해야 한다. 모델 학습 중에 갱신되는 퍼버와 매개변수들을 포함하는 옵티마이저(Optimizer)의 state_dict를 함께 저장하는 것이 중요하다. 이 외에도 중단 시점의 에포크(epoch), 마지막으로 기록된 학습 오차(training loss), 외부 torch.nn.Embedding 계층 등, 알고리즘에 따라 저장하고 싶은 항목들이 있을 것이다. 개요 여러 체크포인트들을 저장하기 위해서는 사전(dictionary)에 체크포인트들을 구성하..
[Pytorch] 모델 저장하고 불러오기 저장하기나 불러오기를 통해 모델의 상태를 유지(persist)하고 모델의 예측을 실행하는 방법을 알아보자. 모델 가중치 저장하고 불러오기 PyTorch 모델은 학습한 매개변수를 state_dict라고 불리는 내부 상태 사전(internal state dictionary)에 저장한다. 이 상태 값들은 torch.save 메소드를 사용하여 저장(persist)할 수 있다. model = models.vgg16(pretrained=True) torch.save(model.state_dict(), 'model_weights.pth') 모델 가중치를 불러오기 위해서는, 먼저 동일한 모델의 인스턴스(instance)를 생성한 다음에 load_state_dict() 메소드를 사용하여 매개변수들을 불러온다. model..
[Pytorch] 모델 매개변수 최적화하기 모델과 데이터가 준비되었으면 데이터에 매개변수를 최적화하여 모델을 학습하고, 검증하고, 테스트할 차례이다. 모델을 학습하는 과정은 반복적인 과정을 거친다. (에폭(epoch)이라고 부르는) 각 반복 단계에서 모델은 출력을 추측하고, 추측과 정답 사이의 오류(손실(loss))를 계산하고, 매개변수에 대한 오류의 도함수(derivative)를 수집한 뒤, 경사하강법을 사용하여 이 파라매터들을 최적화(optimize)한다. 하이퍼파라매터(Hyperparameter)하이퍼파라매터(Hyperparameter)는 모델 최적화 과정을 제어할 수 있는 조절 가능한 매개변수이다. 서로 다른 하이퍼파라매터 값은 모델 학습과 수렴율(convergence rate)에 영향을 미칠 수 있다. (하이퍼파라매터 튜닝(tuning)..
[Pytorch] COCO Data format과 Pycocotools COCO Dataset은 Object Detection, Segmentation, Keypoint Detection 등을 위한 데이터셋으로, 매년 전 세계의 여러 대학과 기업이 참가하는 대회에서 사용되고 있다. COCO Dataset 자체를 이용하기도 하지만, 데이터를 저장하는 방식인 COCO Data format 역시 많이 활용되기도 한다. COCO Data format과, 이를 불러오고 사용할 때 유용한 COCO API인 Pycocotools에 대해 알아보자. COCO Data Format Detection, Segmentation 등 태스크를 위해서는 bounding box의 좌표, segmentation mask 픽셀 등 필요한 정보가 많다. 따라서 이러한 정보들(annotation)을 json ..
[Pytorch] TORCH.AUTOGRAD를 사용한 자동 미분 신경망을 학습할 때 가장 자주 사용되는 알고리즘은 역전파이다. 이 알고리즘에서, 매개변수(모델 가중치)는 주어진 매개변수에 대한 손실 함수의 변화도(gradient)에 따라 조정된다. 이러한 변화도를 계산하기 위해 PyTorch에는 torch.autograd라고 불리는 자동 미분 엔진이 내장되어 있다. 이는 모든 계산 그래프에 대한 변화도의 자동 계산을 지원한다. 입력 x, 매개변수 w와 b , 그리고 일부 손실 함수가 있는 가장 간단한 단일 계층 신경망을 가정해보자. PyTorch에서는 다음과 같이 정의할 수 있다 import torch x = torch.ones(5) # input tensor y = torch.zeros(3) # expected output w = torch.randn(5, 3, r..
[Pytorch] 신경망 모델 구성하기 신경망은 데이터에 대한 연산을 수행하는 계층(layer)/모듈(module)로 구성되어 있다. torch.nn네임스페이스는 신경망을 구성하는데 필요한 모든 구성 요소를 제공한다. PyTorch의 모든 모듈은 nn.Module의 하위 클래스(subclass)이다. 신경망은 다른 모듈(계층; layer)로 구성된 모듈이다. 이러한 중첩된 구조는 복잡한 아키텍처를 쉽게 구축하고 관리할 수 있다. 학습을 위한 장치 얻기 가능한 경우 GPU와 같은 하드웨어 가속기에서 모델을 학습하려고 한다. torch.cuda를 사용할 수 있는지 확인하고 그렇지 않으면 CPU를 계속 사용한다. device = 'cuda' if torch.cuda.is_available() else 'cpu' print('Using {} devi..
[Pytorch] Transform 데이터가 항상 머신러닝 알고리즘 학습에 필요한 최종 처리가 된 형태로 제공되지는 않는다. 변형(transform)을 해서 데이터를 조작하고 학습에 적합하게 만들자. 모든 TorchVision 데이터셋들은 변형 로직을 갖는, 호출 가능한 객체(callable)를 받는 매개변수 두개 ( 특징(feature)을 변경하기 위한 transform과 정답(label)을 변경하기 위한 target_transform)를 갖는다 torchvision.transforms모듈은 주로 사용하는 몇가지 변형(transform)을 제공한다. FashionMNIST 특징(feature)은 PIL Image 형식이며, 정답(label)은 정수(integer)이다. 학습을 하려면 정규화(normalize)된 텐서 형태의 특징(feat..
[Pytorch] Dataset과 Dataloader 데이터 샘플을 처리하는 코드는 지저분(messy)하고 유지보수가 어려울 수 있다. 더 나은 가독성(readability)과 모듈성(modularity)을 위해 데이터셋 코드를 모델 학습 코드로부터 분리하는 것이 이상이다. PyTorch는 torch.utils.data.DataLoader와 torch.utils.data.Dataset의 두 가지 데이터 기본 요소를 제공하여 미리 준비된(pre-loaded) 데이터셋 뿐만 아니라 가지고 있는 데이터를 사용할 수 있도록 한다. Dataset은 샘플과 정답(label)을 저장하고, DataLoader는 Dataset을 샘플에 쉽게 접근할 수 있도록 순회 가능한 객체(iterable)로 감싼다. PyTorch의 도메인 특화 라이브러리들은 (FashionMNIST와..