TIL 2021/08/18

#AutoGrad & Optimizer

  • nn.Parameter
    • Tensor 객체의 상속 객체
    • nn.Module 내에 attribute가 될 때는 required_grad = True 로 지정되어 학습대상이 되는 tensor임
    • 우리가 직접 지정할 일은 잘 없음
  • backward
    • Layer에 있는 Parameter들의 미분을 수행
    • Forward의 결과값 (model의 output = 예측치)와 실제 값간의 차이(loss)에 대해 미분을 수행
    • 해당 값으로 Parameter 업데이트
  • backward from the scratch
    • 실제 backward는 Module 단계에서 직접 지정가능
    • Module에서 backward와 optimizer 오버라이딩
    • 사용자가 직접 미분 수식을 써야하는 부담 \rightarrow 쓸일은 없으나 순서를 이해할 필요는 있음

#Pytorch Dataset

  • 데이터 입력 형태를 정의하는 클래스
  • 데이터를 입력하는 방식의 표준화
  • Image, Text, Audio 등에 따른 다른 입력 정의

example)

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):
    label = self.labels[idx]
    text = self.data[idx]
    sample = {"Text"; text, "Class":label}
    return sample
  • Dataset 클래스 생성시 유의점

    • 데이터 형태에 따라 각 함수를 다르게 정의함
    • 모든 것을 데이터 생성 시점에 처리할 필요는 없음
    • 데이터 셋에 대한 표준화된 처리방법 제공 필요
    • 최근에는 HuggingFace등 표준화된 라이브러리 사용
  • DataLoader

    • Data의 Batch를 생성해주는 클래스
    • 학습직전(GPU feed전) 데이터의 변환을 책임
    • Tensor로 변환 + Batch 처리가 메인 업무
    • 병렬적인 데이터 전처리 코드의 고민 필요

회고

  • 생각보다 이번주차에 할일이 많아졌음
  • 아무래도 Pytorch 기초라고 하길래 생각보다 공부할 부분이 없을거라고 생각했는데 hook이나 이런 부분은 생소해서 시간을 많이 썼음
  • 스터디에서도 어려운 부분이 많아서 최대한 열심히 해서 일정을 맞춰봐야할거 같음

좋은 웹페이지 즐겨찾기