トレーニングの損失がスムーズで、検証の損失がエポック全体でノイズが多い(リンクを参照)理由について 何か考えはありますか? この Kaggle コンペティションで提供された眼底写真のデータセットを使用して、糖尿病性網膜症の検出 (バイナリ分類)のための深層学習モデルを実装しています。TensorflowバックエンドでKeras 2.0を使用しています。
データ セットが大きすぎてメモリに収まらないため、トレーニング フォルダと検証フォルダからランダムに画像を取得して を使用fit_generator
しています。ImageDataGenerator
# TRAIN THE MODEL
model.fit_generator(
train_generator,
steps_per_epoch= train_generator.samples // training_batch_size,
epochs=int(config['training']['epochs']),
validation_data=validation_generator,
validation_steps= validation_generator.samples // validation_batch_size,
class_weight=None)
私たちの CNN アーキテクチャは VGG16 で、最後の 2 つの完全に接続されたレイヤーでドロップアウト = 0.5、最初の完全に接続されたレイヤーの前でのみバッチ正規化、およびデータ拡張 (画像を水平方向と垂直方向に反転することで構成される) です。トレーニングと検証のサンプルは、トレーニング セットの平均と標準偏差を使用して正規化されています。バッチサイズは 32 です。アクティベーションは asigmoid
で、損失関数はbinary_crossentropy
です。Github で実装を見つけることができます
高度に正則化されたモデルで試してみたところ、動作はまったく同じであったため、オーバーフィッティングとはまったく関係ありません。検証セットからのサンプリングに関連していますか? 以前に同様の問題を抱えた人はいますか?
ありがとう!!