最後のレイヤーで活性化すると、二重クロスエントロピー損失が使用され、反対の予測に重大なペナルティが生じます。出力がワンホットコードであり、予測の合計が1であることは考慮されていません。誤った予測は重大なペナルティを課すため、適切に分類することを幾分学んでいます。
これまでのワンホットコードを実施するには、カテゴリクロスエントロピーでsoftmax
のアクティブ化を使用します。これはあなたが使うべきものです。
Kerasは各ピクセルでsoftmaxをサポートしていないため、問題はsoftmax
を使用しています。
Permute
レイヤーを使用して寸法を(n_rows、n_cols、7)に置き換えて、Reshape
レイヤーを使用して(n_rows * n_cols、7)に変更してください。その後、softmax
アクティブ化レイヤーを追加して、クロスエントロピー損失を使用することができます。それに応じてデータも再構成する必要があります。
そうすることの他の方法は、深さ、ソフトマックス実装することになります。
def depth_softmax(matrix):
sigmoid = lambda x: 1/(1 + K.exp(-x))
sigmoided_matrix = sigmoid(matrix)
softmax_matrix = sigmoided_matrix/K.sum(sigmoided_matrix, axis=0)
return softmax_matrix
とラムダ層としてそれを使用する:
model.add(Deconvolution2D(7, 1, 1, border_mode='same', output_shape=(7,n_rows,n_cols)))
model.add(Permute(2,3,1))
model.add(BatchNormalization())
model.add(Lambda(depth_softmax))
tf
image_dim_ordering
が使用されている場合、あなたは道を行うことができますPermute
レイヤーを使用します。
詳細については、hereを参照してください。
非常に詳細な回答ありがとうございます。私は、形を変えて、ソフトマックスとカテゴリークロスエントロピーで行った。スピードや最終精度の点で2つの方法のパフォーマンスに大きな違いがあると思いますか?再度、感謝します! – TSW
私はこのシナリオでは自分で作業していませんが、両方を確認できます。あなたが試みることができるもう一つのことは、最初に 'sigmoid'とバイナリのクロスエントロピー損失として最終層のモデルを作り、' 'softmax''でトップレイヤーとend'を置き換えて、カテゴリクロスエントロピーで再学習します。 2回目のトレーニングはすばやく収束しますが、全体的にトレーニング時間が短縮され、より正確になると思います。 – indraforyou
こんにちはindraforyou、私はまたセマンティックセグメンテーションの場合に取り組んでいます。マスクされた画像は、(1、n_rows、n_cols)として表される。この場合、SigmoidとBinary Cross-Entrophyを使用できますか?含まれる具体的な手続きはありますか? – user297850