
import torch
from torch import nn
from torch.nn import functional as F
from torch.utils.data import DataLoader, random_split
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda
from pytorch_lightning import Trainer
from pytorch_lightning.callbacks import ModelCheckpoint
from pytorch_lightning.core.lightning import LightningModule
from torchmetrics import functional as FM
import matplotlib.pyplot as plt
1) torch 메인 네임스페이스. (pytorch 라이브러리의 기원인 라이브러리, 페이스북에서 만듦)
텐서 등의 다양한 수학 함수가 포함되어져 있으며 Numpy와 유사한 구조.
torch 패키지는 다차원 텐서에 대한 데이터 구조를 포함하고 이러한 텐서에 대한 수학적 연산을 정의.
Tensor 및 임의 유형의 효율적인 직렬화 및 기타 유용한 유틸리티를 위한 많은 유틸리티를 제공
2)torch.nn, torch.nn.functional 파이토치에서 신경망을 쌓기 위한 코어 모듈은 torch.nn이다. 신경망을 구축하기 위한 다양한 데이터 구조나 레이어 등이 정의되어져 있다. 완전연결층(fully connected layer, nn.Linear), 합성곱층(convolutional layer, nn.Conv2d), RNN, LSTM과 같은 Layer들, ReLU와 같은 활성화 함수(activation function), MSELoss와 같은 손실 함수(loss function)들이 있다.
자세한 설명: https://pytorch.org/docs/stable/nn.html
3)torch.utils.data 데이터 로딩 유틸리티의 핵심은 Dataset, DataLoader 클래스이다. Dataset을 통해 개인적인(custom) 데이터를 pytorch 표준 텐서로 바꿀 수 있다. 그리고 DataLoader를 통해 배치단위로 학습 루프에 들어가기 위한 데이터를 준비해주는 데이터 로더를 만들 수 있다. random_split는 데이터 세트를 분리할 수 있게 해준다.
4)torchvision 널리 사용되는 데이터 셋, 아키텍쳐 모델 computer vision에서의 일반적인 이미지 변환으로 구성되어 있다.
torchvision의 구성: https://dororongju.tistory.com/144
5) torchvision.transform 데이터가 항상 머신러닝 알고리즘 학습에 필요한 최종 처리가 된 형태로 제공되지는 않는다. 변형(transform) 을 해서 데이터를 조작하고 학습에 적합하게 만든다. torchvision.transforms 모듈은 주로 사용하는 몇가지 변형(transform)을 제공한다.
6)ToTensor, Lambda(torchvision.transform) FashionMNIST 특징(feature)은 PIL Image 형식이며, 정답(label)은 정수(integer)이다. 학습을 하려면 정규화(normalize)된 텐서 형태의 특징(feature)과 원-핫(one-hot)으로 부호화(encode)된 텐서 형태의 정답(label)이 필요하다. 이러한 변형(transformation)을 하기 위해 ToTensor 와 Lambda 를 사용한다.
7)pytorch_lightning Python을 위한 오픈소스 머신 러닝 라이브러리
pytorch 코드의 추상화를 통해, 프레임워크를 넘어 하나의 코드 스타일로 자리 잡기 위해 탄생한 라이브러리이다.
자세한 설명: https://baeseongsu.github.io/posts/pytorch-lightning-introduction/
8)Trainer(pytorch_lightning)
모델의 학습에 관여되는 engineering을 담당하는 클래스이다.
주로 훈련, 검증, 테스트 데이터로더 실행을 해준다. Trainer는 단순한 "훈련" 이상의 기능을 수행할 수 있다.
공식 문서: https://lightning.ai/docs/pytorch/stable/common/trainer.html
9) pytorch_lightning.callbacks 콜백을 지정해서 checkpoint, earlystop, 등등 컨트롤할 수 있도록 해준다.
10)ModelCheckpoint 가장 마지막 epoch가 아니라 매 epoch마다 checkpoint를 저장하는 등 checkpointing을 좀더 세부적으로 설정할 수 있게 해준다.
Python & library/PyTorch Lightning checkpoint 저장하기: https://bo-10000.tistory.com/188
11)Lightning Module lightning module은 trainer와 model이 상호작용할 수 있게 해주는 구현체이다.
ightning Module을 통해 모델을 구현한다.
기존 pytorch와 달리, DataLoader, Model, optimizer, Training loof 등을 Lightning Module Class 안에 한번에 구현하도록 되어있다.
12) Lightning Module의 메서드 구성
1)Computations (__init__)
2)Train loop (training_step)
3)Validation loop (validation_step)
4)Test loop (test_step)
5)Prediction loop (predict_step)
6)Optimizers (configure_optimizers)
메서드 설명 및 Lightning Module의 내부 구조: https://velog.io/@juheesvt/Pytorch-Lightning-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
13) TorchMetrics TorchMetrics는 PyTorch 에서 사용할 수 있는 Metric 구현 라이브러리이다. 구현된 Metric은 100가지가 넘으며, 쉬운 API 구성으로 훈련 및 평가시 사용할 수 있다.
TorchMetrics 사용 방법: https://minimin2.tistory.com/190
AI에서 Metric이란?
평가 지표(Metrics)는 쉽게 말하면 모델의 성능을 숫자로 표현하는 것이다.
14) functional(TorchMetrics) Metric 구현을 함수형으로 구현할 수 있도록 해준다.
15) matplotlib.pyplot matplotlib.pyplot 모듈은 MATLAB과 비슷하게 명령어 스타일로 동작하는 함수의 모음이다.
matplotlib.pyplot 모듈의 각각의 함수를 사용해서 간편하게 그래프를 만들고 변화를 줄 수 있다.
출처(Reference)
https://wikidocs.net/157552 - pytorch 딥러닝 챗봇
https://dororongju.tistory.com/144 - Pytorch torchvision에서 데이터셋 가져오기
https://baeseongsu.github.io/posts/pytorch-lightning-introduction/ - 우리가 PyTorch Lightning을 써야 하는 이유
https://lightning.ai/docs/pytorch/stable/common/trainer.html - Pytorch-lightning docs(training)
https://bo-10000.tistory.com/188 - Python & library/PyTorch Lightning checkpoint 저장하기
https://minimin2.tistory.com/190 - torch metrics
https://velog.io/@reversesky/%EB%94%A5%EB%9F%AC%EB%8B%9Dtorch%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90 - tensor에 대한 설명