VGG net
- stride 1, padding 1로 설정된 3x3 convolution으로만 구성되어 있다.
torchvision.models.vgg : vgg 11~19까지 만들 수 있음
이때, 3x224x224 입력을 기준으로 만들도록 기본값이 설정되어있음

VGG 만들어보기

1. import
2. model url

3. VGG class 만들기
- input : features, num_class, init_weights
- classifier : fc layer들
- features : 쌓아가야 할 VGG-net의 convolution layer
- kaiming_nomalization을 통해 weight 초기화
cf> VGG net에서는 bias 값이 항상 0이다.

- " features 값을 어떻게 넣어줄 수 있는가 "
- make_layer : CFG에 맞춰 make_layer 동작
- CFG : network 구성 역할
cf> in_channels를 v로 바꿔주는 이유
: convolution layer를 통과하고 나오면 batch_size는 그대로지만 channel 수는 변하게 됨. 다음 channel에서 변경된 수 만큼의 channel을 받아야 하므로 in_channel을 그만큼 바꿔주게 됨

- VGG 를 사용한 모델 만들기
VGG(feature, num_class, init_weight)
- feature : make_layer를 통해 내가 원하는 대로 생성 가능
- num_class : CIFAR10의 경우, 클래스가 10개이므로 10으로 설정
+) CFG에서 custom layer를 추가한 경우, VGG class의 in_feature가 달라지므로 수정해줘야 함
-> image size가 다른 상태에서 VGG-net을 적용하고자 하면 VGG class에서 nn.Linear() 수정해주기
CIFAR10에 VGG net 넣어 수행해보기

0. 현재 폴더에 vgg.py 텍스트 파일 만들기

1. import 및 visdom 실행

2. visdom을 통해 loss 값을 확인하기 위해 loss tracker 설정
3. manual_seed 고정 및 cuda 설정
4. CIFAR10 데이터 불러오기


5. visdom에서 불러온 이미지 데이터 확인해보기
위와 같은 결과를 볼 수 있음

6. 0번에서 만든 vgg.py 불러오기(또는 torchvision 내의 vgg 불러오기)
7. CFG 설정

8. VGG class 만들기
9. 7번에서 만등 CFG로 make_layer 구성하기

10. loss function와 optimizer 설정
- epoch 돌리는 동안 learning rate를 계속 고정시키는 것보다 조금씩 감소시키면서 학습시키면 보다 정밀한 학습이 가능함
=> lr_scheduler.StepLR(optimizer, step_size, gamma) : lr_scheduler를 step_size번 실행할 때마다 learning rate 값에 gamma만큼 곱해줌

- 만든 모델 학습시킨 후 loss 값 변화 확인하기

- loss 값 변화 그래프 그리기

위와 같은 loss 값 변화를 확인할 수 있음


- test 해보기
정확도가 약 76%임을 확인할 수 있음