-1

イメージの100属性を予測するニューラルネット(CNN)を構築しています。トレーニングデータは、未知の場合は、その属性が存在し、0ないのであれば存在している属性は値1を持っている、と-1CNNとクロスエントロピーロスによる属性予測(不在属性の場合は負の値)

img/img001.jpg -1, 1, -1 , 1, 0 .......-1 , 1

image_name image_attributes

follows-ようです。私はTensorflowを使用して、私の損失を定義しています -

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))

私の質問私はこの損失を最小化する場合、時にはそれがいくつかの属性が存在しない場合の-1表現に起因する負の値を持っており、私の最適化アルゴリズムが既に最小限に抑えることができますです負の損失。相違じゃない?

この損失を最小限に抑えるのが正しいのですか、または唯一の損失を持つためにmod関数を使用する必要がありますか?

+0

soft maxを0と1の間の確率に変換し、クロスエントロピーを使用して、選択されたクラスに1つでもない場合はペナルティを課します。あなたの結果をx、y、zとして表示する必要があります。確信度を選択してペナルティを科す可能性が高いです – Feras

+0

あなたのクラスにワンホットエンコーディングを使用する必要があります。これは、このサンプルがどのクラスに属するかに応じて、ラベルを0および1の(サンプル、3)形式にエンコードすることを意味します。 –

+0

@ThomasPinetzこれらは属性、つまり非排他的なクラスです。では、どのように1つのホットエンコーディングが機能しますか? '0'で表される未知の属性はどうでしょうか – Rusty

答えて

1

したがって、結果がどのようなものであっても3つのノードとして分類子から結果を確認する必要があります。彼らは(Y0、Y1、Y2)、その後、これらの結果にソフトマックスを適用することによって、あなたは、確率の範囲内の解答を表す新しい価値があるでしょうどの

0と1の間

enter image description here

はそうあなたが持っているとしましょうこのフォーム[1、-2,0]の結果ソフトマックスを適用することによって、あなたは[0.7,0.04,0.26]

p_y_given_x = softmax(y_given_x) 

、その後、あなたARGMAX applyinngによってに基づいて予測されたクラスを定義することができますを持っています最も高い確率の結果

y_prediction = argmax(p_y_given_x) 
我々の場合には意味

[1,0,0]

今、あなたは何をすべきかを、あなたのデータ属性に基づいて予測クラスの数を取ることです。

が、最初のは、一つのことに同意しましょう

  • 存在:クラス0
  • ない存在:クラス1
  • 知られていない:クラス2

のは、あなたのオブジェクトが存在しないとしましょうイメージ内で2番目のオブジェクトの値をとり、ログライクな時を適用する必要があります。

-log(p_y_given_x[y]) 

これは第2の0.04であり、このようにエラーを逆伝播することによってシステムをペナルティ化する。

+0

詳細な回答ありがとうございます。私はあなたが説明しているものを手に入れます。私が見ている負の総損失について心配しています。 Softmaxは各属性値を確率に変換します。クロスエントロピー損失をどのように計算すればよいですか?損失は​​常に正の値でなければなりませんか? – Rusty

+0

私が説明したあなたのsoftmaxは結果が0と1の正の値になるよう変換します。答えがplz – Feras

+0

あなたの質問に答えた場合、私は0-1で私の結果を変換しますが、地上の真理は0-1の範囲ではありません、-1,0、-1と計算クロスエントロピー損失sumofall(-Yi * ln(1/Pi))は負の値を与えるかもしれません。 – Rusty

0

範囲を[0、1]に変更することを検討してください。0は存在しない、1が存在する近く、および不明な値はしきい値を超えない値です。

属性の存在と予測の信頼という2つの次元を表すスカラー値を取得しようとしています。

+0

はい、私はそれを行うことができますが、私は未知を明示的に予測する方法をベンチマークしています。最後の手段は、単純な1つのホットエンコーディングと確率に基づくしきい値です。 – Rusty

+0

[0、1]を使用するとまったく同じです。ここで0.5は中間の値です... – Lunaweaver

+0

大丈夫です!これは私が実験しているものです。結果と一緒に戻ってきます。ありがとうございました :) – Rusty

関連する問題