0

私はケア1.2.2とテンソル1.4.0のバックエンドを使用しています。イメージセグメンテーションのためにCNNをトレーニングしている間に、私の損失はどのように急増しますか?

私はunetアーキテクチャを使用しています。私は650x650ピクセルと6つのシャネルの708イメージを持っています。ミラーリングと回転でデータセットを増強し、合計4248枚の画像を作成しました。

私は2つのクラスを持って、私の損失関数はこの1つである:

def jaccard_coef_loss(y_true, y_pred): 
    smooth = 1e-12 
    intersection = K.sum(y_true * y_pred, axis=[0, -1, -2]) 
    sum_ = K.sum(y_true + y_pred, axis=[0, -1, -2]) 
    jac = (intersection + smooth)/(sum_ - intersection + smooth) 
    return 1 - K.mean(jac) 

私のオプティマイザ:

optimizer = SGD(lr=0.01, momentum=0.9, nesterov=True) 

私は画像の全体の約30%、のBATCH_SIZEの検証セットを持っています4、シャッフルはTrueに設定されます。モデルは各エポックの各トレーニング画像を通過します。 200エポックが予定されていますが、10エポックのバリデーションセットが改善されていない場合、学習は中止されます。ここで

は、最終的なエポック

Epoch 10/200 
4248/4248 [==============================] - 3192s - loss: 0.1388 - acc: 0.0868 - jaccard_coef: 0.8612 - jaccard_coef_int: 0.8613 - val_loss: 0.2957 - val_acc: 0.0536 - val_jaccard_coef: 0.7043 - val_jaccard_coef_int: 0.7043 
Epoch 11/200 
4248/4248 [==============================] - 3167s - loss: 0.1375 - acc: 0.0901 - jaccard_coef: 0.8625 - jaccard_coef_int: 0.8626 - val_loss: 0.2968 - val_acc: 0.0632 - val_jaccard_coef: 0.7032 - val_jaccard_coef_int: 0.7033 
Epoch 12/200 
4248/4248 [==============================] - 3272s - loss: 0.1964 - acc: 0.1084 - jaccard_coef: 0.8036 - jaccard_coef_int: 0.8037 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2793e-15 - val_jaccard_coef_int: 4.7833e-18 
Epoch 13/200 
4248/4248 [==============================] - 3112s - loss: 1.0000 - acc: 0.5089 - jaccard_coef: 4.6290e-15 - jaccard_coef_int: 5.5532e-18 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2659e-15 - val_jaccard_coef_int: 4.7833e-18 
Epoch 14/200 
4248/4248 [==============================] - 2032s - loss: 1.0000 - acc: 0.5089 - jaccard_coef: 2.5857e-15 - jaccard_coef_int: 5.1207e-18 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2659e-15 - val_jaccard_coef_int: 4.7833e-18 
Epoch 15/200 
4248/4248 [==============================] - 2260s - loss: 1.0000 - acc: 0.5089 - jaccard_coef: 2.6600e-15 - jaccard_coef_int: 5.0932e-18 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2659e-15 - val_jaccard_coef_int: 4.7833e-18 
Epoch 16/200 
4248/4248 [==============================] - 2914s - loss: 1.0000 - acc: 0.5089 - jaccard_coef: 2.3220e-15 - jaccard_coef_int: 4.8916e-18 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2659e-15 - val_jaccard_coef_int: 4.7833e-18 
Epoch 17/200 
4248/4248 [==============================] - 2928s - loss: 1.0000 - acc: 0.5089 - jaccard_coef: 2.6034e-15 - jaccard_coef_int: 6.3645e-18 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2659e-15 - val_jaccard_coef_int: 4.7833e-18 
Epoch 18/200 
4248/4248 [==============================] - 2738s - loss: 1.0000 - acc: 0.5089 - jaccard_coef: 2.3913e-15 - jaccard_coef_int: 4.7182e-18 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2659e-15 - val_jaccard_coef_int: 4.7833e-18 
Epoch 19/200 
4248/4248 [==============================] - 2922s - loss: 1.0000 - acc: 0.5089 - jaccard_coef: 6.2745e-15 - jaccard_coef_int: 5.0041e-18 - val_loss: 1.0000 - val_acc: 0.5066 - val_jaccard_coef: 1.2659e-15 - val_jaccard_coef_int: 4.7833e-18 

のためのトレーニングログは、私がエポック12と13との間に起こったのか分からないです、それは私のせいですかにアップグレードすることで固定されるだろう既知のバグがありますkeras/tfの新しいバージョンですか?

答えて

1

あなたの最適化プロセスが分かれているようです。おそらく、あなたのモデルがゴミを予測する原因となった非常に大きな勾配があります。学習率を0.001に減らし、12回目から再開してください。

+0

この場合、私は確かに '' adam''オプティマイザを使用します。 SGDは単純に最悪です(少なくとも初心者の方に) –

+0

@DanielMöller「Adam」のオプティマイザはセグメンテーションタスクに適しているかどうかわかりません。私はSGDがしばしば検出の方が良いことを知っています。私はlrを減らし始め、そこから続けるだろう – Shai

関連する問題