-torch
- 모델을 구성하는데 필요한 모든 구성 요소를 제공 => torch.utils.data.Dataset, torch.utils.data.DataLoader, torch.nn.Module
- 자동 미분, 다양한 loss function 제공 => torch.nn, torch.nn.functional
- 다양한 optimizer 제공 => torch.optim
-Dataset과 DataLoader를 사용하면, 데이터 집합에서 미니 배치(mini batch) 크기의 데이터를 반환, 반환되는 모든 데이터의 차원의 크기는 같아야 한다.
- 모든 이미지는 같은 height, width, channel을 가진다.
- 모든 시퀀스는 같은 max_len을 가진다, zero_padding으로 길이를 맞춰준다.
-미니 배치: 전체 데이터 집합을 더 작은 부분집합으로 분할한 일부 데이터, batch_size
-Dataset은 단일 데이터를 모델의 입력으로 사용할 수 있는 형태(tensor)로 변환하는 작업을 수행.
-PyTroch에는 이미지 데이터를 다루는 'ImageForlder', 'CIFAR10', 'MNIST'와 같은 Data 구현체들이 제공된다.-Pytorch Custom model 정의
-Dataset은 단일 데이터를 모델의 입력으로 사용할 수 있는 형태(tensor)로 변환하는 작업을 수행.
-PyTroch에는 이미지 데이터를 다루는 'ImageForlder', 'CIFAR10', 'MNIST'와 같은 Data 구현체들이 제공된다.-Pytorch Custom model 정의
- super().__init__(): 부모 클래스(nn.Module) 초기화 하여, 모델의 레이어, 파라미터에 접근할 수 있다.
- forward(self, x): 입력 데이터에 대한 연산을 정의
-PyTorch 훈련 과정
- 학습모드: model.train(), train_loss=0.0, train_accuracy=0
- gpu에 dataload: images.to(device), labels=labels.to(device)
- 순전파: output = model(data), loss = criterion(outputs, labels)
- 역전파, 가중치 업데이트: optimizer.zero_grad(), loss.backword(), optimizer.step()
- 손실과 데이터 정확도 계산: train_loss += loss.item(), _, predicted = torch.max(outputs, 1), train_accuracy += (predicted == labels).sum().item()
-PyTorch 평가 과정
- 평가 모드: model.eval():
- gradient 계산 비활성화:
-모델이 학습 시 옵션
- batchnorm, dropout, activation, init_method
- batchnorm과 dropout은 둘 다 사용해도 되긴 하지만, 둘 중 하나만 썼을 때 성능이 더 좋게 나올 수도 있다.
- activation과 init_method는 절대 없어서는 안된다. activation 옵션이 False일 시, 모델은 선형적으로 되어서 학습효과가 떨어진다. init_method는 gradient가 0이 되어서 학습이 불가능해진다.
- BatchNorm, Dropout 사용 모델: 0.9802
- BatchNorm 제거 모델: 0.9780
- Dropout 제거 모델: 0.9819
- Activation Function 제거 모델: 0.9147
- 가중치를 0으로 초기화한 모델: 0.1133
-Fine Tuning: : 전이 학습의 한 방법으로, Pretrained model을 그대로, 혹은 layers를 추가해 새로운 작업에 맞는 데이터로 모델을 추가 훈련 시키는 방법-timm: CV 분야에서 사용하는 pretrained model 라이브러리
- timm.create_model()로 객체를 생성할 때 마다 fc layer의 weight를 랜덤하게 initializing 한다.
- pretrained model의 embedding을 그대로 사용하기 때문에 convolutional layers는 동일
-Hugging Face
- 오픈 소스 라이브러리 및 여러 도구를 지원하는 커뮤니티
- NLP, CV, multi-modal, audio 등 다양한 pretrained 모델 라이브러리 제공
- 찾은 모델을 pip로 설치 (pip install transformers==4.31.0 -q

-전이 학습 전략
- 학습 데이터가 적을 때는, retrained model을 freeze 시켜놓고 새롭게 추가하는 fully connected layer만 finetunning
for para in model.parameters():
# 모든 layer freeze 하기
para.requires_grad = False
for para in model.fc.parameters():
# fc layer 만 학습하기
para.requires_grad = True
# 모든 layer freeze 하기
para.requires_grad = False
for para in model.fc.parameters():
# fc layer 만 학습하기
para.requires_grad = True
- 학습 데이터가 많을 때는 pretrained 모델이 가진 지식을 많이 수정해야해서, 전체 layer를 finetunning
- learning rate 조절: 너무 크면 학습이 진행 안 되서, 작게 한다.
-모니터링 도구
-TensorBoard
-TensorBoard
- TensorFlow의 공식 시각화 툴킷,
- 학습 과정에서의 metric(loss, accuracy 등) 변화를 트래킹
- embedding을 불러와 모델의 구조를 그래프로 표현 가능
- weight & bias에 대한 히스토그램 시각화 가능
-WandB
- PyTorch뿐 아니라 TensorFlow, Keras 등의 주요 딥러닝 프레임워크와도 호환되며, 협업하는 팀과 모델의 모니터링 결과 및 시각화 자료를 공유할 수 있는 강력한 도구.
- 주요 기능으로는 각 학습에서 생성되는 로그를 트래킹하고 관리할 수 있는 '실험 관리'
- metric 시각화, weight & bias에 대한 히스토그램 시각화
- sweep 기능을 사용한 하이퍼 파라미터를 최적화 등이 있다.

-PyTorch Lightning
- 딥러닝을 구현하는 코드의 양이 많아지며 코드의 복잡성이 증가하게 됨.
- PyTorch의 구현과정을 간편화하기 위해 등장한게 PyTorch Lightning
- PyTorch의 model, optimizer, training loop 등을 한 번에 구현가능
- .to(device)와 같은 하드웨어 호출 코드를 작성할 필요 없이 자동 최적화
- learning rate, early stop 자동최적화
- TensorBoard, WandB 사용 가능
- 16-bit precision 옵션 추가 가능
-LightningModule
- __init__: 모델의 layer를 초기화. 손실 함수, metric 선언 가능
- forward: 모델의 데이터 연산과정 정의
- configure_optimizers: 옵티마이저와 학습률 스케쥴러 정의, 반환. 학습률 스케쥴러는 생략 가능.
- training_step: train 데이터 셋의 미니 배치에 대해 손실을 반환하는 과정을 정의. 모델 학습과 관련된 optimizer.zero_grad(), loss.backward(), optimizer.step() 같은 코드는 작성 안 해도 된다.
- validation_step: validation set의 미니 배치에 대한 모델의 성능(loss, accuracy)을 확인하는 과정을 정의
- test_step: test set의 미니 배치에 대한 모델의 성능(loss, accuracy)을 확인하는 과정을 정의
- predict_step: 추론해야하는 데이터 셋의 미니 배치에 대한 예측 과정을 정의(모델의 얘측값, 확률값 반환)
- 모델 평가와 관련된 코드인 model.eval(), with torch.no_grad() 같은 코드를 작성 안 해도 된다. 코드의 간결화
-Trainer
- LightningModule의 메소드를 이용해 모델 학습을 실행하는 클래스.
- trainer.fit()을 실행시키면 'training_step', 'validation_step', 'configure_optimizers'를 호출해 학습이 시작된다.
- trainer.validate(): 'validation_step' 호출
- trainer.test(): 'test_step' 호출
- trainer.predict: 'predict_step' 호출
-Hydra: 코드를 구조화하거나 어려운 문제를 해결하기 위해, 별도의 설정 파일(yaml)을 작성하여 관리하는 오픈소스 프레임워크(Framework)-yaml
- key-value 구성
- 들여쓰기 구조
- 주석 사용 가능
- ${variable} 형태로 값을 작성하여, 설정값 내부에서 다른 설정 값을 참조할 수 있는 기능을 제공.
- 불러온 변수는 객체 방식이나 딕셔너리 방식으로 접근 가능.
-Hydra의 특징
- yaml 데이터 포맷을 사용하여 변수 접근, 변수 참조(${variable}) 사용가능.
- 설정 파일의 값을 Terminal의 커맨드라인을 통해 쉽게 추가하거나 변경 가능.
- 나눠진 여러 설정 파일들을 이용하여 하나의 설정 파일처럼 구성 가능.
- 서로 다른 설정 파일의 실험 조합을 한 줄의 Terminal 커맨드라인으로 실행 가능
- Hydra를 통해 소스코드를 실행할 경우, Hydra는 자동으로 실행 당시의 설정값과 log를 기록함. (outputs/yyyy-MM-dd/hh-mm-ss 폴더 생성)
- 'instantiate'를 사용해 인스턴스 생성가능.
-Config group
- Hydra에서는 설정 파일을 그룹으로 묶어 관리할 수 있다. (모델 설정 파일을 model 폴더에 생성해서 사용)
- Config group을 통해 설정값에 들어갈 수 있는 항목이 여러 개(resnet18.yaml, resnet34.yaml)가 있으면 디폴트로 실행할 defaults를 하나 지정해야한다.
-Terminal 커맨드라인
- '=' 커맨드: 설정 파일의 설정값을 변경 가능.
- '+' 커맨드: 설정 파일의 설정값을 추가 가능.
- '++' 커맨드: 설정 파일의 설정값을 변경, 추가 가능.
- '--multirun' 옵션을 사용해 여러 설정 파일의 조합을 한 번에 실행 가능.
-PyTorch Lightning으로 작성된 코드에 Hydra를 적용해서 설정 파일을 작성하면, 함께 사용 가능하다.
업스테이지 AI에서 제공하는 PyTorch 강의의 후기이다. Tensor의 조작부터 해서 Pytorch를 이용해, DNN, CNN, VGG, GoogLeNET, RESENT, RNN, LSTM, GRU 등 다양한 모델을 구현하는 방법을 소개해주고, TensorBoard, WandB 같은 강력한 모니터링 도구의 사용법을 소개해준다.
그 외에도 PyTorch를 편리하게 하는 PyTorch Lightning, Hydra를 소개해줬다. 특히나 PyTorch Lightning은 여태까지 어렵게 이해한 PyTorch를 왜 배웠나 싶을정도로 간결함을 보여줬다. 물론 PyTorch의 구현과정을 배우는건 중요한 일이다.
'Upstage AI Lab 6기' 카테고리의 다른 글
| 딥러닝 강의 후기 (1) | 2025.02.11 |
|---|---|
| Upstage AI Lab 6기 Git 강의 후기 (1) | 2024.12.16 |
| 컴퓨터 공학 개론 후기 (1) | 2024.12.11 |
| 프로젝트 수행을 위한 이론 1:Statistic 후기 (3) | 2024.12.03 |
| Upstage AI Lab 6기 Python 강의 후기 (0) | 2024.11.26 |