[PyTorch] PyTorch 구조

Jeonghyun·2022년 9월 27일

PyTorch

목록 보기
2/6

AutoGrad & Optimizer

torch.nn.Module

  • 딥러닝을 구성하는 Layer의 base class
  • input, output, forward, backward, parameter(tensor)

torch.nn.Parameter

  • tensor의 상속 객체
  • nn.Module 내에 attribute가 될 때는 required_grad=True 로 지정됨

backward

  • layer의 parameter들의 미분 수행
  • Forward의 결과값(model의 output=예측치)과 실제값 간의 차이(loss)에 대해 미분 수행
  • 해당 값으로 parameter 업데이트
for epoch in range(epochs):
	optimizer.zero_grad()  # 이전의 gradient값이 지금 학습에 영향을 주지 않도록 초기화 
	outputs = model(inputs)  # 예측값(y_hat)으로 변환
    loss = criterion(outputs, labels)  # 실제값 간의 차이(loss)
    loss.backward()  # 구하고자 하는 모든 weight값 
    optimizer.step()  # weight값 업데이트

datasets & dataloaders

dataset 클래스

  • 데이터 입력 형태를 정의하는 클래스
  • 데이터를 입력하는 방식의 표준화
  • image, text, audio 등에 따른 입력 정의

자료수집 → transforms(전처리, tensor로 변환) → Dataset → DataLoader → Model

dataset 클래스 생성

import torch
from torch.utils.data import Dataset


class CustomDataset(Dataset):
    def __init__(self, text, labels):  # 초기 데이터 생성 방법 지정
        self.labels = labels
        self.data = text


    def __len__(self):  # 데이터의 전체 길이
        return len(self.labels)

    def __getitem__(self, idx):  # index 값을 주었을 때 반환되는 데이터의 형태(X, y)
        label = self.labels[idx]
        text = self.data[idx]
        sample = {"Text": text, "Class": label}
        return sample
  • 데이터 형태에 따라 함수를 각각 다르게 정의
  • 모든 것을 데이터 생성 시점에 처리하지 않고, 학습에 필요한 시점에 변환
  • 데이터 셋에 대한 표준화된 처리방법 제공 필요

dataloader 클래스

  • data의 batch를 생성해준는 클래스(index로 여러 데이터를 묶어서 한번에 가져옴)
  • 학습직전 데이터의 변환을 책임
  • Tensor로 변환 + Batch 처리가 메인 업무
  • 병렬적인 데이터 전처리 코드의 고민 필요
MyDataLoader = DataLoader(MyDataset, batch_size=2, shuffle=True)
# next에서 batch_size만큼 memory(GPU)에 올라가서 처리
next(iter(MyDataLoader))

참고
pytorch 튜토리얼
https://tutorials.pytorch.kr/beginner/blitz/autograd_tutorial.html

dataloader 옵션
https://pytorch.org/docs/stable/data.html




출처 - 부스트캠프 AI tech 교육자료


[부스트캠프 AI Tech] Week 2 - Day 2

0개의 댓글