Processing math: 100%
반응형

Python/Pytorch 28

[Pytorch] model.eval() vs torch.no_grad()의 차이

안녕하세요. 이번 시간에는 파이토치에서 추론에 사용되는 eval() 모드와gradient를 생략하기 위해서 사용되는 torch.no_grad()의 차이에 대해서간략하게 비교 예제로 차이를 이해해보도록 하겠습니다. 모델 예시다음과 같은 아주 간단한 모델과 텐서가 있다고 가정해보겠습니다.Dropout이 있는 상황을 주목해주시면 좋습니다.import torchimport torch.nn as nn# 모델 정의model = nn.Sequential( nn.Linear(10, 5), nn.ReLU(), nn.Dropout(p=0.5))# 예시 inputinput_tensor = torch.randn(1, 10) 코드 출력 비교 예시model.train()output_train_1 = model..

Python/Pytorch 2025.06.03

[Pytorch] 파이토치 ReLU 함수 종류 총정리(ReLU, LeakyReLU, PReLU, RReLU, ReLU6)

안녕하세요.이번 글에서는 파이토치에서 제공하는 다양한 ReLU 함수들을간략히 요약하여 정리해보도록 하겠습니다. 1. ReLU먼저, x가 음수인 경우 전부 0으로 클리핑하는일반적인 ReLU 함수입니다. 수식ReLU(x)=max(0,x) 코드 예시모듈 버전과 함수형 버전을 모두 제공하고 있다는 점에 유의해주세요.import torchimport torch.nn as nnimport torch.nn.functional as Fx = torch.tensor([-1.0, 0.0, 2.0])# 모듈형relu_mod = nn.ReLU(inplace=True)y1 = relu_mod(x) # tensor([0.0, 0.0, 2.0])# 함수형y2 = F.relu(x) # tensor([..

Python/Pytorch 2025.05.18

[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
반응형