일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Numpy
- Comparisons
- Python 유래
- Operation function
- Python
- 최대가능도 추정법
- namedtuple
- subplot
- 표집분포
- ndarray
- python 문법
- Python 특징
- seaborn
- 딥러닝
- 정규분포 MLE
- dtype
- unstack
- Numpy data I/O
- 가능도
- pivot table
- 카테고리분포 MLE
- boolean & fancy index
- linalg
- VSCode
- type hints
- 부스트캠프 AI테크
- BOXPLOT
- groupby
- Array operations
- scatter
- Today
- Total
또르르's 개발 Story
[Stage 1 - 이론] Model 본문
1️⃣ Model 정의
1) nn.Modules
nn.Modules를 상속받아서 사용하면 model 객체 자체를 print (오른쪽 위) 하거나 modules() 함수를 사용 (오른쪽 아래)해서 모듈의 구조를 파악할 수 있습니다.
또한, forward 함수를 사용하면 a(x)와 같이 객체에 직접 넣어서 (오른쪽 위) 사용할 수 있습니다.
2) nn.Module Family
nn.Module을 상속받은 모든 클래스의 공통된 특징은 모든 nn.Module은 child modules를 가질 수 있다는 점입니다.
Model을 정의하는 순간, 그 모델에 연결된 모든 module을 확인할 수 있습니다.
Pytorch의 nn.Module에 정의되어있는 모든 module들은 forward함수 등 똑같은 양식으로 작성되어있기 때문에 Custom 한 Model을 만들었더라도 nn.Module을 상속해서 만들게 되면 child module들과의 호환성에 문제를 걱정하지 않아도 됩니다.
3) Parameter
모델에 정의되어 있는 modules가 가지고 있는 요소들입니다.
각 model parameter들은 data, grad, requires_grad 변수 등을 가질 수 있습니다.
- data : parameter가 가지고 있는 수치
- grad : gradient를 저장하는 값
- required_grad : gradient를 가질 수 있는지를 확인 (boolean), 학습을 trainable / Freeze 형태로 변경할 수 있음
2️⃣ Pretrained Model
1) torchvision.models
여러가지 모델 구조와 pretrained 된 weight들을 다운로드할 수 있습니다.
2) CNN base 모델 구조
여기서 대부분의 Classifier는 fully connected layer을 의미합니다.
3) 내 데이터, 모델과의 유사성
만약 ImageNet의 Pretraining을 사용하게 된다면 실생활에 존재하는 이미지를 1000개의 다른 class로 구분한 CNN model을 받게 됩니다. 내 데이터, 모델과의 유사성을 따지기 위해서는 Pre-train Model이 어떤 데이터와 모델로 pretrained 되어있는지 확인해보아야 합니다.
하지만 Pretraining 할 때 설정했던 문제와 현재 문제와의 유사성이 떨어지게 되는 경우가 있습니다.
4) 해결방안
해결방안은 문제 상황에 따른 Case마다 다르게 됩니다.
- Case 1. 문제를 해결하기 위한 학습 데이터가 충분할 때
- Feature Extraction (Backbone Freeze, Classifier Trainable)
CNN Backbone이 해결하려는 문제와 High Similarity(ex. 사람, 동물 비교)하다면 Classifier만 train합니다.
- Fine Tuning (Backbone Trainable, Classifier Trainable)
CNN Backbone이 해결하려는 문제와 Low Similarity(ex. 같은 차종 비교)하다면 CNN Backbone과 CLassifier 둘 모두를 train 합니다.
(아무리 Low Similarity라도 아예 처음부터 train 하는 것 보다는 pre-trained 모델을 사용하면 수렴속도나 확률이 더 좋아집니다.)
- Case 2. 학습 데이터가 충분하지 않은 경우
- Feature Extraction (Backbone Freeze, Classifier Trainable)
이러한 경우는 적은 데이터로도 학습이 가능합니다.
High Similarity를 가지고 있기 때문에 적은 데이터로 Classifier만 train하는 방법을 사용합니다.
- Fine Tuning (Backbone Trainable, Classifier Trainable)
훈련이 안되거나 Overfitting 될 가능성이 높습니다.
'[P Stage 1] Image Classification > 이론' 카테고리의 다른 글
[Stage 1 - 이론] Ensemble (0) | 2021.04.02 |
---|---|
[Stage 1 - 이론] Training & Inference (0) | 2021.04.01 |
[Stage 1 - 이론] Dataset & DataLoader (0) | 2021.03.30 |