4つのクラスで小さなカスタム画像分類トレーニング/ valデータセットを構築しました。 トレーニングデータセットの画像は〜110.000です。 検証データセットには〜6.000個のイメージがあります。画像分類。開始時に訓練中に妥当性検査の詰まりがありました。(v1)
検証精度と損失が同じままながら、私が経験してる問題は、トレーニング中に、(最後の訓練サンプルの平均精度と測定された)トレーニング精度とトレーニング損失の両方を向上させる、ということです。
私はインポートすることにより、いくつかの畳み込みのアーキテクチャを採用しています私が創業し、resnetモデルを使用する場合にのみ、発生した私は、同じトレーニングと検証データにalexnetモデルを使用している場合、検証損失と精度が私の実験では
を改善それらは次のようコードが整理されtensorflow.contrib.slim.nets
から:
...
images, labels = preprocessing(..., train=True)
val_images, val_labels = preprocessing(..., train=False)
...
# AlexNet model
with slim.arg_scope(alexnet.alexnet_v2_arg_scope()):
logits, _ = alexnet.alexnet_v2(images, ..., is_training=True)
tf.get_variable_scope().reuse_variables()
val_logits, _ = alexnet.alexnet_v2(val_images, ..., is_training=False)
# Inception v1 model
with slim.arg_scope(inception_v1_arg_scope()):
logits, _ = inception_v1(images, ..., is_training=True)
val_logits, _ = inception_v1(val_images, ..., is_training=False, reuse=True)
loss = my_stuff.loss(logits, labels)
val_loss = my_stuff.loss(val_logits, val_labels)
training_accuracy_op = tf.nn.in_top_k(logits, labels, 1)
top_1_op = tf.nn.in_top_k(val_logits, val_labels, 1)
train_op = ...
...
代わりに、別のevalスクリプトを使用しての、私は各エポックの終わりに検証ステップを実行していると、ALSよo、デバッグの目的で、私は早いvalステップ(訓練の前に)を実行しています。最後のxステップで訓練の予測を平均化して訓練の精度をチェックしています。
IはインセプションV1モデル(alexnetいずれかをコメントアウト)を使用する場合、以下のようにロガー出力は1つのエポックの後である:
early Validation Step
precision @ 1 = 0.2440 val loss = 1.39
Starting epoch 0
step 50, loss = 1.38, training_acc = 0.3250
...
step 1000, loss = 0.58, training_acc = 0.6725
...
step 3550, loss = 0.45, training_acc = 0.8063
Validation Step
precision @ 1 = 0.2473 val loss = 1.39
示す、トレーニング精度と損失として1つのエポックの後に多くのことを改善するが、検証の損失はまったく変わりません。これは少なくとも10回テストされており、結果は常に同じです。オーバーフィットのために検証の損失が悪化していたのかどうかはわかりますが、この場合は全く変化していません。検証データに問題を除外するために
、私はまた、スリムでAlexNetの実装を使用してトレーニングしながら、結果を提示しています。 alexnetモデルを使用している場合、正しく改善、
early Validation Step
precision @ 1 = 0.2448 val loss = 1.39
Starting epoch 0
step 50, loss = 1.39, training_acc = 0.2587
...
step 350, loss = 1.38, training_acc = 0.2919
...
step 850, loss = 1.28, training_acc = 0.3898
Validation Step
precision @ 1 = 0.4069 val loss = 1.25
精度と検証の損失、両方のトレーニングとテストデータでは、彼らは、その後のエポックに維持向上:alexnetモデルとの訓練は、次の出力を生成します。
alexnetでトレーニングをするとき、私は、問題の原因である可能性があります理解していない、と開始/ resnetモデルを使用している場合、なぜそれが自分自身を提示し、なく。
アイデアはありますか?
損失は、スケーリングされていないロジットを使用し、内部的にsoftmaxを実行するtf.nn.sparse_softmax_cross_entropy_with_logitsを使用して計算されます。 – user3897060