인공신경망과 딥러닝 강의 Toy Project입니다.
- numpy : 1.26.0
- Python : 3.9.18
- pytorch : 2.1.1
- epoch : 50
- batch_size : 128
- activation function(LeNet5, LeNet5_Reg) : ReLU
- optimizer : SGD with momentum 0.9
- lr : 0.01
python main.py --batch_size 128 --num_epochs 50
LeNet5_Reg 모델은 LeNet5에 여러가지 Regularization 기법을 적용하여 학습
- Augmentation
- transforms.RandomAffine(degrees=0.15, translate=(0.1, 0.1))
- rotation + shift 효과
- Dropout
- dropout rate : 0.3
- dropout rate : 0.3
- Batch Nomarlization
Model | Accuracy |
---|---|
LeNet5 | 61706 |
CustomMLP | 62930 |
LeNet5_Reg | 62158 |
-
LeNet5 parameter 계산
-
C1 : 6 x (5x5x1 + 1) = 156
-
S2 : 0
-
C3 : 16 x (5x5x6 + 1) = 2416
-
S4 : 0
-
C5 : 120 x (5x5x16 + 1) = 48120
-
F6 : 84 x (120 + 1) = 10164
-
F7 : 10 x (84 + 1) = 850
- 총 파라미터 수 : 61706
-
-
CustomMLP parameter 계산
-
F1 : (1024 + 1) * 60 = 61500
-
F2 : (60 + 1) * 20 = 1220
-
F3 : (20 + 1) * 10 = 210
- 총 파라미터 수 : 62930
-
-
LeNet5_Reg
- LeNet5에 Batch Nomarlization가 추가되어, 파라미터 수가 452(226 x 2)개 더 많음
Model | Accuracy |
---|---|
LeNet5 | 99.03% |
CustomMLP | 92.19% |
LeNet5_Reg | 99.40% |
- 각 모델의 Last epoch에서 Accuracy를 측정
- 직접 구현한 LeNet5은 알려져있는 예측 성능 약 99%와 유사함을 확인 가능
- Accuracy : CustomMLP < LeNet5 < LeNet5_Reg
- Train loss는 학습이 진행될수록, 0에 수렴하게 됨
- 하지만, Test loss는 초기 에폭 이후 증가하는 모습을 보임
- LeNet5는 과적합되는 모습을 accuracy와 loss plot을 통해 확인 가능
- Train set에 대하여, LeNet5 보다 학습이 더딘 양상을 확인 가능
- Test set에 대하여, LeNet5이 CustomMLP보다 더 높은 성능을 보임
- Train loss가 천천히 작아짐
- Test loss도 계속해서 작아지는 모습을 보임
- LeNet5_Reg는 에폭이 지날수록, 더 안정적이고 더 나은 방향으로 학습되고 있음을 확인 가능
- LeNet5_Reg가 안정적으로 빠르게 더 나은 일반화 성능을 보임을 확인 가능
- Augmentation, Dropout, Batch Normalization을 적용한 후, 더 나은 일반화 성능을 보임(LeNet5_Reg > LeNet5)
- Regularization 효과가 적절하게 적용되었음 확인 가능!