私のチームは、損傷/許容可能な部品のバイナリ分類のためにTensorflowでCNNをトレーニングしています。 cifar10のサンプルコードを変更して、コードを作成しました。ニューラルネットワークでの以前の経験では、損失が0に非常に近くなるまで(1を大きく下回るまで)常にトレーニングを行いました。ただし、トレーニング中に検証セットを使用してモデルを評価しているため(別のGPU上)、約6.7kステップ後に精度の増加が止まったように見えますが、40kステップを超えても損失は着実に低下しています。これは過剰適合によるものですか?損失が非常にゼロに近づいたら、精度の別のスパイクが見られると期待すべきですか?現在の最大精度は許容できません。強制終了してチューニングを続ける必要がありますか?おすすめは何ですか?これが、トレーニングプロセスの修正されたコードとグラフです。
https://Gist.github.com/justineyster/6226535a8ee3f567e759c2ff2ae3776b
バイナリのクロスエントロピー損失の減少は、精度の向上を意味しません。タイムステップ1、2、3でのラベル1、予測0.2、0.4、0.6、および分類しきい値0.5を考慮します。タイムステップ1および2では、損失は減少しますが、精度は向上しません。
トレーニングデータを過剰適合させることで、モデルに十分な容量があることを確認してください。モデルがトレーニングデータを過剰適合している場合は、ドロップアウト、L1およびL2の正規化、データ拡張などの正規化手法を使用して過剰適合を避けます。
最後に、検証データとトレーニングデータが同じ分布からのものであることを確認します。
ここに私の提案があります。考えられる問題の1つは、ネットワークがデータを記憶し始めることです。はい、正則化を増やす必要があります。
はい、トレーニングの損失を減らし、検証の安定した精度でそれを殺します。つまり、ネットワーク容量が低い(弱いモデル)ことを意味します。