반응형
torch.nn.Module
- 딥러닝을 구성하는 Layer의 base class
- input, Output, Forward, Backward 정의
- 학습의 대상이 되는 parameter(tensor) 정의
nn.Parameter
- Tensor 객체의 상속 객체
- nn.Module 내에 attribute가 될 때는 required_grad = True로 지정되어 학습 대상이 되는 Tensor
- 보통 우리가 직접 지정할 일은 잘 없고 대부분의 layer에는 weights 값들이 지정되어 있음.
class MyLinear(nn.Module):
def init (self, in_features, out_features, bias=True):
super(). init ()
self.in_features = in_features
self.out_features = out_features
self.weights = nn.Parameter(
torch.randn(in_features, out_features))
self.bias = nn.Parameter(torch.randn(out_features))
def forward(self, x : Tensor):
return x @ self.weights + self.bias
Backward
- Layer에 있는 Parameter들의 미분을 수행
- Forward의 결과값(model의 output = 예측치)과 실제값간의 차이(loss)에 대해 미분을 수행
- 해당 값으로 Parameter 업데이트
- 학습을 진행할때 아래 4단계를 꼭 진행한다.
- zero_grad,loss,backward,step
for epoch in range(epochs):
… …
# Clear gradient buffers because we don't want any gradient from previous epoch to
#carry forward
optimizer.zero_grad()
# get output from the model, given the inputs
outputs = model(inputs)
# get loss for the predicted output
loss = criterion(outputs, labels)
print(loss)
# get gradients w.r.t to parameters
loss.backward()
# update parameters
optimizer.step()
Backward from the scratch
- 실제 backward는 Module 단계에서 직접 지정가능
- Module에서 backwward와 optimizer 오버라이딩
- 사용자가 직접 미분수식을 써야하는 부담이 있다.
- 쓸 일은 없으나 순서를 이해할 필요는 있음
Dataset 클래스
- 데이터 입력 형태를 정의하는 클래스
- 데이터를 입력하는 방식의 표준화
- 이미지,텍스트,오디오 등에 따라 다른 입력정의
출처 : 네이버 부스트캠프 ai tech 강의 컨텐츠
import torch
from torch.utils.data import Dataset, DataLoader
class CustomDataset(Dataset):
### 초기 데이터 생성 방법을 지정
def __init__(self, text, labels):
self.labels = labels
self.data = text
### 데이터의 전체길이
def __len__(self):
return len(self.labels)
### index 값을 주었을 때 반환되는 데이터의 형태(X,y)
def __getitem__(self, idx):
label = self.labels[idx]
text = self.data[idx]
sample = {"Text": text, "Class": label}
return sample
Dataset 클래스 생성시 유의점
- 데이터 형태에 따라 각 함수를 다르게 정의함
- 모든 것을 데이터 생성 시점에 처리할 필요는 없음
- image의 Tensor 변화는 학습에 필요한 시점에 반환
- 데이터 셋에 대한 표준화된 처리방법 제공이 필요하다. 이는 후속연구자 또는 동료들에게 필요함
- 최근에는 HuggingFace등 표준화된 라이브러리 사용
DataLoader 클래스
- Data의 Batch를 생성해주는 클래스
- 학습직전(Gpu에 feed전) 데이터의 변화를 책임
- Tensor로 변환 + Batch 처리가 메인 업무
- 병력적인 데이터 전처리코드의 고민 필요
반응형
'Study > AI' 카테고리의 다른 글
[AI] Recurrent Neural Networks(RNN) (0) | 2023.03.26 |
---|---|
[AI] Convolutional Neural Networks(CNN) (0) | 2023.03.26 |
[Pytorch] 파이토치 기초 (0) | 2023.03.19 |
[AI] 딥러닝 기초 (0) | 2023.03.12 |
[Math] 경사하강법 (0) | 2023.03.12 |