前幾天我介紹許多經典卷積神經網路架構,
也順便等我的模型們都訓練完成。
我總共訓練了9種模型,
分別是VGG16, ResNet, ResNetv2, DenseNet121, DenseNet201,
MobileNet, MobileNetV2, EfficientNetB0, EfficientNetB7.
下圖可以看出我們在同樣的條件下做實驗,
像是...
batch size: 32
epochs: 30
optimizer: Adam
(如果有不一樣的話,MLFlow會標記黃底)
下圖X軸是時間(單位:秒),Y軸是準確率。
可以看出EfficientNetB7一枝獨秀,花費了超越12k秒,也就是3.3小時以上。
第二、三名是DenseNet201和VGG16,也花費了4k秒去訓練模型,也就是1.1小時以上。
Metrics | MobileNetV2 | MobileNet | EfficientNetB7 | EfficientNetB0 | DenseNet201 | DenseNet121 | ResNet50V2 | ResNet50 | VGG16 |
---|---|---|---|---|---|---|---|---|---|
accuracy | 0.422 | 0.881 | 0.964 | 0.952 | 0.674 | 0.832 | 0.945 | 0.951 | 0.914 |
loss | 1.547 | 0.348 | 0.108 | 0.139 | 0.892 | 0.474 | 0.162 | 0.147 | 0.259 |
val_accuracy | 0.385 | 0.584 | 0.633 | 0.617 | 0.588 | 0.592 | 0.55 | 0.561 | 0.583 |
val_loss | 1.663 | 1.472 | 1.756 | 1.905 | 1.21 | 1.566 | 2.431 | 2.312 | 1.986 |
對訓練集準確率來說: EfficientNetB7 > EfficientNetB0 > ResNet50 > 其他
對訓練集損失值來說: EfficientNetB7 < EfficientNetB0 < ResNet50 < 其他
對驗證集準確率來說: EfficientNetB7 > EfficientNetB0>DenseNet121 > 其他
對驗證集損失值來說: DenseNet201 < MobileNet < DenseNet121 < 其他
用MLFlow對val_accuracy做圖:
X軸為epoch;Y軸為準確率。
OK,用這四個指標看起來不那麼一致,
那我只好用多數決來決定。
假設4個指標都有三票可以選,
所以EfficientNetB7和EfficientNetB0皆獲得最高票(3票),
ResNet50和DenseNet121皆獲得2票。
那EfficientNetB7和EfficientNetB0要選哪一個呢?
由於EfficientNetB0的訓練時間僅需37.1分鐘,
而EfficientNetB7需要222分鐘,是B0的6倍之多。
EfficientNetB0僅有4M參數,而EfficientNetB7有64M參數,
B7是B0的16倍之多。
如果我選了B7,我浪費了這麼多空間和時間,只換來val_acc上升0.016。
那將是完全不划算的事情!
所以我決定選用EfficientNetB0當作我的初始演算法!
記住,現在我們對驗證集的準確率是61.7%。
這是我們的Baseline,
接下來幾天,我將用各種方法,加強我們的模型!
ps:距離當年的冠軍(69.8%)還落後 8.1%。
ps:其實EFN_B7已經打進八強了 :D