Kerasでval_acc、val_auc、val_lossが同じ値のまま更新されない

Tensorflow.kerasでDensenetとMobileNetを使っていた時のこと。

accやauc、lossは更新されるが、val_aucが0.5000のまま一切更新されず、val_accやval_lossも同じ値を取り続けていた。

Epoch 2/100
91/91 [==============================] - ETA: 0s - loss: 0.1925 - auc: 0.5667
Epoch 00002: val_auc did not improve from 0.50000
91/91 [==============================] - 28s 303ms/step - loss: 0.1925 - auc: 0.5667 - val_loss: 0.0685 - val_auc: 0.5000
Epoch 3/100
91/91 [==============================] - ETA: 0s - loss: 0.0231 - auc: 0.8605
Epoch 00003: val_auc did not improve from 0.50000
91/91 [==============================] - 27s 302ms/step - loss: 0.0231 - auc: 0.8605 - val_loss: 0.0685 - val_auc: 0.5000
Epoch 4/100
91/91 [==============================] - ETA: 0s - loss: 0.0222 - auc: 0.8767
Epoch 00004: val_auc did not improve from 0.50000

Epoch 00004: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.
91/91 [==============================] - 28s 305ms/step - loss: 0.0222 - auc: 0.8767 - val_loss: 0.0685 - val_auc: 0.5000
Epoch 5/100
91/91 [==============================] - ETA: 0s - loss: 0.0226 - auc: 0.8744
Epoch 00005: val_auc did not improve from 0.50000
91/91 [==============================] - 27s 301ms/step - loss: 0.0226 - auc: 0.8744 - val_loss: 0.0685 - val_auc: 0.5000

画像のpreprocess_inputやchannnel first, lastの確認もしてみたが、特に問題ない。

ResnetやEfficientNetだと問題なく値が更新されていくのでデータセットは大丈夫のはず。

loss functionやoptimizerを変えても上手く行かず、悩んでいた。

DenseNetの論文を見てみると

The initial learning rate is set to 0.1, and is divided by 10 at 50% and 75% of the total number of training epochs.
On ImageNet, we train models for 90 epochs with a batch size of 256.
The learning rate is set to 0.1 initially, and is lowered by 10 times at epoch 30 and 60

https://arxiv.org/abs/1608.06993

epochが進むにつれてlearning rateを10で割っていってるようなので同じように真似してみたところ、learning rateを0.0001にしたあたりで学習が上手く進み始め、val_acc等の値も更新され始めた。

学習係数もハイパーパラメータの1つであると再認識することが出来た。

参考

403 Forbidden

コメント

タイトルとURLをコピーしました