Pytorch’s Model
Model
이전 배웠던 데이터셋과 데이터 로드를 통해 뽑은 데이터를 출력으로 보낼 모델을 구성해 보자.
모델이 뭐냐?
- “In general, a model is an informative representation of an object, person or system”
- 시스템을 표현하는 방식을 모델이라고 한다.
파이토치로 모델 디자인하기
Pytorch
- 오픈소스 머신러닝 프레임워크
- pythonic하다.
- 슬로건 “FROM RESEARCH TO PRODUCTION” -> 개발에 자유로움이 있다.
Model class
- Pytorch 모델의 모든 레이어는 nn.Module 클래스를 따른다.
- forward() 함수 -> 모델이 호출 되었을 때 실행되는 함수.
nn.Module Family
- nn.Module을 상속받은 모든 클래스의 공통된 특징
- 모든 nn.Module은 child modules를 가질 수 있다. -> 내 모델을 정의하는 순간, 그 모델에 연결된 모든 모듈을 확인할 수 있다.
- 모든 nn.Module은 forward() 함수를 가진다. -> 내가 정의한 모델의 forward()를 한번만 실행한 것으로 정보를 가질 수 있다.(그 모델의 forward에 정의된 모듈 각각의 forward()가 실행된다.)
Parameter
- 모델에 정의되어 있는 modules가 가지고 있는 계산에 쓰일 Parameter
- Parameter()로 정의해야함.
- 각 모델 파라미터들은 data, grad, requires_grad변수 등을 가지고 있다.
state_dict() -> 모델의 상태를 알 수 있다.(dict 형태)
Pretrained Model
Pretrained Model을 어떻게 활용하는지 방법에 대해 알아보자.
배경
- 모델 일반화를 위해 매번 수 많은 이미지를 학습시키는 것은 까다롭고 비효율적이다.
- 좋은 품질, 대용량의 데이터로 미리 학습한 모델 -> 내 목적에 맞게 사용하자.
TORCHVISION.MODELS
- torchvision.models에 pretrained model이 많이 공개되어 있다.
- https://pytorch.org/vision/stable/models.html
- Pretrained Weight를 쉽게 다운로드 가능하다.
- timm
Transfer Learning
- pretrained 모델을 가져와 내 문제에 적용시켜 훈련시키는 것.
ImageNet Pretraining
ImageNet Images -> CNN BackBone -> Classifier -> 1000Class
실생활에 존재하는 이미지를 1000개의 다른 class로 구분한다.
구름 위성 사진 -> CNN BackBone -> Classifier -> 구름 종류
어떻게 구름 위성 사진을 구분하는데 pretrained model을 적용할까?
Case by Case
Case 1. 학습 데이터가 매우 충분할 때
- high similarity -> 매우 유사할때(ex 실생활의 이미지 해결)
- Classifier 만 새로 적용한다.
- Low similarity -> 유사하지 않을때(ex 주제가 다를때, 위성사진에 적용)
- CNN Backbone 위에서 모델을 개선하고 Classifier를 수정하여 적용함.
Case 2. 학습 데이터가 충분하지 않은 경우
- high similarity -> 매우 유사할때
- CNN Backbone 위에서 모델을 개선하고 Classifier를 수정하여 적용함.
- Low similarity -> 유사하지 않을때
- Pretrained model을 적용하는 것을 추천하지 않는다.
Comments