-
[TIL] pytorch Basic (2)개발자노트/네이버 부스트캠프 AI 2023. 11. 29. 00:34
Linear transformation
torch.nn.Linear
선형변환
nn.Module
+ 기능 ⇒ basic building block
+ nn.Module(basic building block) ⇒ 딥러닝 모델
+ nn.Module(딥러닝 모델) ⇒ 더 큰 딥러닝 모델
nn.Module은 상자와 같다.
import torch.nn as nn class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() self.layer1 = nn.Linear(10, 5) self.layer2 = nn.Linear(5, 1) def forward(self, x): x = self.layer1(x) x = self.layer2(x) return x
forward는 torch에서 미리 정의된 메소드라서 따로 호출하지 않아도 자동으로 호출된다.
모듈을 상속한 클래스
class MyComplexModel(nn.Module): def __init__(self): super(MyComplexModel, self).__init__() self.submodule1 = MyModel() self.submodule2 = nn.Linear(5, 3) def forward(self, x): x = self.submodule1(x) x = self.submodule2(x) return x
AutoGrad
=automatic differentiation
자동미분 기능
역전파 알고리즘을 가능하게 한다.
모델 학습시 중요함
x = torch.tensor([2.0], requires_grad=True) y = X**2 z = y.mean() print(x.grad) # None z.backward() # 자동으로 미분 계산 print(x.grad) # d(z)/dx = 2*x = 4.0
Optimizer
기계학습에서 모델의 가중치를 학습하는 데 사용되는 알고리즘
미분에 대한 업데이트
손실함수를 최소화하도록 가중치를 조정
SGD
Stochastic Gradient Descent
확률적 경사 하강법
매개변수를 업데이트 할 때 일정한 학습률을 사용한다.
(Stochastic = 확률적)Adam
Adaptive Moment Estimation
적응적 학습률을 사용하여 각 매개변수에 대해 독립적인 학습률을 조정한다.
다양한 문제에서 잘 동작한다.Adagrad
Adaptive Gradient Algorithm
각 매개변수에 대한 학습률을 조절,
과거 그래디언트 제곱의 누적합을 사용한다.RMSprop
Root Mean Square Propagation
Adagrad의 한계를 극복하기 위해 도입참고
https://velog.io/@freesky/Optimizer
실습을 해봤을 때 SGD의 성능이 가장 낮았고, Adam이 가장 좋은 성능을 나타내었다.
🔷Dataset & DataLoader
Dataset class
이 클래스를 상속해서 사용자 정의 데이터 셋을 만든다.
입력 형태를 정의함
입력 방식의 표준화
다양한 입력 포맷
데이터 형태에 따라 각 함수를 다르게 정의함
from torch.utils.data import Dataset class CustomDataset(Dataset): def __init__(self, ...): # 초기화 작업 수행 # CSV, XML 데이터를 불러옴 def __len__(self): return len(self.data) def __getitem__(self, index): # 인덱스에 해당하는 데이터 샘플 반환 # 원본 데이터를 가져와서 전처리하고 데이터 증강하는 부분
DataLoader class
- data의 batch를 생성
- 학습 직전 데이터의 변환을 책임
- Tensor로 변환 + 전처리
next(iter(DataLoader(dataset_iris, batch_size=4)))
데이터셋을 미니배치로 나누어 모델에 공급한다.
필요에 따라 데이터를 섞거나 병렬로 로딩할 수 있다.
📑Parameters
batch_size : 미니배치 크기(정수)
shuffle : 데이터 섞을지 여부(bool)
num_workers : 데이터 로드할 때 사용할 병렬 작업의 개수
pin_memory : CPU로 데이터 로드 후, 이를 고정 메모리 영역으로 복사하여 GPU로 빠르게 전송할 지 여부 (bool)
drop_last : 데이터셋 크기가 배치 사이즈로 나누어 떨어지지 않는 경우 마지막 미니배치를 버릴지 여부 (bool)collate_fn
: 데이터 사이즈를 맞출 때 사용. 미니배치 생성하기 전 각 샘플을 처리하는 방법을 정의함.
from torch.utils.data import DataLoader def collate_fn(batch): # batch는 리스트 형태로 각 샘플을 받음 images, labels = zip(*batch) # 각 샘플에 대한 처리 수행 (예: 이미지 데이터 정규화, 텐서로 변환 등) processed_images = process_images(images) processed_labels = process_labels(labels) return processed_images, processed_labels # DataLoader 생성 시 collate_fn 매개변수에 collate_fn 함수 전달 train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, collate_fn=collate_fn)
'개발자노트 > 네이버 부스트캠프 AI' 카테고리의 다른 글
[네부캠 AI tech] 5주차 주간회고 (12/04~12/08) (4) 2023.12.08 [네부캠 AI tech] 4주차 주간회고 (11/27~12/01) (0) 2023.12.01 [TIL] pytorch Basic (1) (0) 2023.11.27 [네부캠 AI tech] 3주차 주간회고 (11/20~11/24) (2) 2023.11.24 [네부캠 AI tech] 2주차 주간회고 (11/13~11/17) (2) 2023.11.17