반응형

Python/Pytorch 26

[Pytorch] checkpoint vs torchscript vs onnx 모델 속도 비교

파이토치 모델 변환의 대표적인 3가지 포맷인 체크포인트, 토치스크립트 그리고 onnx 방식에 대하여 inference 과정의 속도를 비교해보는 간단한 실험을 진행해 보겠습니다.(동일한 GPU를 사용하는 환경을 가정해 보겠습니다.) 모델 정의 및 변환 코드 예시 우선, 아래와 같이 파라미터 수가 아주 많은 신경망 모델이 하나 있다고 가정해 보겠습니다. import torch import torch.nn as nn class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(50000, 20000) self.fc2 = nn.Linear(20000, 2000) self.fc3 = nn.Linear(2000, ..

Python/Pytorch 2023.09.14

[Pytorch] 실시간 파일 불러오기 방식 Dataset/Dataloader 구현 예제

파이토치에서 전체 데이터셋의 크기가 너무 크거나 다양한 경로에 나눠져 있는 경우 real-time으로 파일을 불러오는 방식의 데이터셋을 구현할 필요가 있습니다. 이 글에서는 실시간으로 파일을 불러오는 데이터셋의 형태를 구현하는 예제를 간략하게 정리해보도록 하겠습니다. 상황 가정 이해를 돕기 위하여 아래와 같이 images 디렉토리 내에 여러 이미지 파일이 저장된 상황을 가정해보도록 하겠습니다. 지금은 이미지 파일이 4개뿐이지만, 아주 많은 수의 이미지가 있는 경우 모든 데이터를 메모리에 동시에 올리는 것이 어려울 수 있습니다. 이런 문제를 해결하기 위하여 real-time 방식의 데이터셋 및 데이터로더를 정의하게 되면 메모리 부족 문제도 해결되면서 iteration 마다 다른 Data Augmentati..

Python/Pytorch 2023.09.13

[Pytorch] 파이토치 가중치 초기화 방법(Xavier, He)

Python torch Weight Initialization 파이토치에서 Xavier, He 등의 가중치 초기화를 각 layer 별로 혹은 모델 전체에 대하여 진행하는 방법을 간략하게 요약해보도록 하겠습니다. 우선, 다음과 같이 fc1, fc2, fc3의 3개의 layer를 가진 간단한 모델 구조를 가정해 보겠습니다. import torch 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 sel..

Python/Pytorch 2022.11.30

[Pytorch] 파이토치 Conv1d, Conv2d 원리 비교

Python torch Conv1d vs Conv2d 파이썬 파이토치에서 convolution을 수행하는 layer 종류인 Conv1d, Conv2d에 대하여 두 종류의 원리와 사용법 차이를 비교해보도록 하겠습니다. Conv1d 예제 및 원리 Conv1d는 1차원 벡터 여러개에 대하여 한 방향으로 움직이며 컨볼루션 합을 진행하는 layer로 대표적인 예시로 자연어 처리에서의 단어 토큰 임베딩의 컨볼루션을 들 수 있습니다. 이해를 돕기 위하여 아래의 상황을 가정한 예시를 그림으로 나타내보겠습니다. sequence length = 5(한 문장은 5개의 단어 토큰으로 구성됩니다.) input dimension = 7(각 토큰을 7차원 임베딩으로 표현합니다.) kernel size = 2(이웃한 2개 토큰의 임..

Python/Pytorch 2022.11.22

[Pytorch] 파이토치 RNN 계열 layer 원리 이해해보기

Python torch RNN, LSTM, GRU 사용법 파이썬 파이토치에서 RNN 계열 layer들의 input, output 형태를 기준으로 layer 개수 및 양방향 여부에 따른 원리를 이해하기 쉽게 설명해보도록 하겠습니다. 1. 기본 RNN, 단층, 단방향 먼저, 가장 기본적인 경우로 일반 RNN이며 single layer, unidirectional인 경우의 예제를 살펴보도록 하겠습니다. 상황은 다음과 같이 가정하겠습니다. sequence length = 2,(아래 그림에서 빨간색, 분홍색 순서입니다.) batch size = 4, input dimension = 5,(각 데이터는 5차원이며, 각 숫자는 x로 표시했습니다.) output dimension = 3 이 경우에 input의 최종 sh..

Python/Pytorch 2022.11.20

[Pytorch] 파이썬 Domain Adaptation 구현 예제(feat. DANN Loss)

이번 글에서는 파이토치로 DANN Loss를 활용한 Domain Adaptation을 간단하게 구현해보는 실습 코드 예제를 다루어보도록 하겠습니다. DANN Loss는 class label 분류 학습과 함께 domain 분류를 진행하되, domain 분류 layer의 gradient에 음수 배를 취하여 domain 간의 거리를 줄이도록 유도하는 학습을 통한 domain adaptation 방식으로 유명하게 사용되는 손실 함수 방식입니다. 여기에서는 예시로 두 숫자 글씨 데이터인 MNIST와 SVHN에 대하여 domain adaptation을 진행해보도록 하겠습니다.(아래 Figure와는 Source와 Target이 반대인 점을 유의해주세요.) Step 1. 데이터셋 로드 및 전처리 먼저, MNIST와 S..

Python/Pytorch 2022.10.14

[Pytorch] 파이토치 과적합 방지(Early Stopping) 구현 방법 정리

파이토치 학습 과정에서 각 epoch가 끝나는 시점에서 validation loss 혹은 validation accuracy 등의 성능 지표를 측정하여 과적합이 의심되는 특정 시점을 넘어가는 경우 조기에 학습을 종료하는 early stopping 기능을 구현하는 방법들을 정리해보도록 하겠습니다. 1. 직접 구현 각 epoch가 끝나는 시점마다 evaluation을 진행 후, 성능 개선 여부를 감시하는 식의 코드를 간단하게 구현해볼 수 있습니다. 예시 pseudo-code의 형태는 다음과 같습니다. best_loss = 10 ** 9 # 매우 큰 값으로 초기값 가정 patience_limit = 3 # 몇 번의 epoch까지 지켜볼지를 결정 patience_check = 0 # 현재 몇 epoch 연속으로..

Python/Pytorch 2022.09.08

[Pytorch] 텐서를 넘파이 배열, 리스트로 변환하는 방법 정리

파이토치 tensor를 numpy array나 list로 바꾸기 파이썬 파이토치에서 tensor 자료형을 넘파이 배열 또는 리스트 자료형으로 변환하는 방법에 대하여 케이스별로 정리해보도록 하겠습니다. 1. 기본 텐서의 경우 : numpy() / tolist() 먼저, grad 정보가 없고 gpu에 선언되지 않은 가장 기본적인 텐서의 경우입니다. 아래와 같은 예시의 tensor를 형변환해보도록 하겠습니다. data1 = torch.randn(3, 2) data1 # 출력 결과 tensor([[-0.2370, -1.4314], [-0.7539, 0.5552], [-1.1405, -0.4047]]) 넘파이 배열 자료형으로 바꾸려면 tensor.numpy() 형태로 지정해주시면 됩니다. data1.numpy()..

Python/Pytorch 2022.08.12

[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

[Pytorch] 파이썬 Contrastive Learning 구현 예제(feat. SimCLR)

Python 파이토치 SimCLR Contrastive Learning 실습 이번 글에서는 파이썬에서 파이토치 모듈을 활용하여 SimCLR 논문의 Contrastive Learning 사례를 간략한 버전으로 구현해보도록 하겠습니다. 이번 사례에서는 설명 간략화를 위하여 비교적 간단한 MNIST 데이터셋을 사용해 보았으며, 모델로는 아주 단순한 CNN 구조를 가정하고 기법을 구현해 보았습니다. 또한, data augmentation은 cutout 이후 회전을 수행하는 1가지 방법에 대해서만 학습을 진행해보는 예제로 글을 구성하였습니다. Step 1 : 데이터셋 불러오기 MNIST 데이터셋을 불러올 수 있는 방법은 torchvision 모듈을 활용할 수도 있지만 여기서는 사이킷런을 이용하여 데이터를 불러오고..

Python/Pytorch 2022.07.20
반응형