問題タブ [cross-entropy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 多くのレルスのネットワークを使用するとクロスエントロピー損失関数が巨大になるのはなぜですか?
私はこの損失関数を持っています:
train_logits
次のように構築されたパイプラインから定義されます。
、 、および は次のlayer_sizes
ようweights
にbiases
構成されます。
arg('act-func')
is relu の場合、relu の長いチェーンを構築すると ( arg('layers')
beingのように[750, 750, 750, 750, 750, 750]
)、損失関数は巨大になります。
relus のチェーンが短い場合 (つまりarg('layers')
is only [750]
)、損失関数は小さくなります。
私の質問は、なぜ損失関数がそれほど劇的に異なるのですか? 私が理解しているように、ロジットの出力はソフトマックス化されて確率分布になります。次に、クロス エントロピーが、この確率分布からワンホット ラベルに決定されます。所有しているレルスの数を変更すると、この関数が変更されるのはなぜですか? 私は、各ネットワークは最初はほぼランダムに等しく間違っているはずであり、損失が大きくなりすぎることはないと考えています。
この損失関数には l2 損失が含まれていないため、重みとバイアスの数の増加はこれを考慮していないことに注意してください。
arg('act-func')
代わりにasを使用するとtanh
、この損失の増加は発生しません。予想どおり、ほぼ同じままです。
tensorflow - CNN をトレーニングするときの大きな入力に対する NaN の Tensorflow エントロピー
TensorFlow を使用して単純な畳み込みニューロン ネットワークを作成しました。入力画像をエッジ = 32px で使用すると、ネットワークは正常に動作しますが、エッジを 2 倍にして 64px にすると、エントロピーが NaN として返されます。問題は、それを修正する方法ですか?
CNN 構造は非常に単純で、次のようになります 。input->conv->pool2->conv->pool2->conv->pool2->fc->softmax
エントロピーは次のように計算されます。
64px の場合:
32px の場合は問題なく表示され、トレーニングにより結果が得られます。
function - tensorflow: reduce_mean と reduce_sum を使用したクロス エントロピー計算の理解
初心者向けの Tensorflow の基本的なニューラル ネットワークを調べていました [1]。エントロピー値の計算とその使用方法を理解するのに苦労しています。この例では、正しいラベルを保持するためにプレース ホルダーが作成されます。
交差エントロピー合計 y'.log(y) は、次のように計算されます。
私たちが持っていると仮定する次元を見ると(要素ごとの乗算):
y_ * log(y) = [バッチ x クラス] x [バッチ x クラス]
y_ * log(y) = [バッチ x クラス]
そして、簡単なチェックでこれを確認します:
今、ここで私が理解していないものがあります。y
私の理解では、クロスエントロピーの場合、 (予測) とy_
(オラクル)の分布を考慮する必要があります。したがって、最初reduce_mean
に y とy_
をそれらの列 (クラスごと) で処理する必要があると思います。次に、サイズの 2 つのベクトルを取得します。
y_ = [クラス x 1 ]
y = [クラス x 1 ]
y_ は「正しい」分布であるため、次のことを行います (この例では、ベクトルが反転していることに注意してください)。
log(y_) = [ クラス x 1 ]
そして、要素ごとの乗算を行います。
yx ログ (y_)
これにより、クラスの長さを持つベクトルが得られます。最後に、このベクトルを合計して単一の値を取得します。
Hy(y_) = sum( yx log(y_) )
ただし、これは実行されている計算ではないようです。私のエラーは誰か説明できますか?たぶん、良い説明のあるページを教えてください。これに加えて、ワンホット エンコーディングを使用しています。したがって、log(1) = 0 および log(0) = -infinity なので、計算でエラーが発生します。オプティマイザーが導関数を計算することは理解していますが、クロスエントロピーはまだ計算されていませんか?
ティア。
[1] https://www.tensorflow.org/versions/r0.9/tutorials/mnist/beginners/index.html
python - Tensorflow tf.nn.in_top_k: ターゲットが範囲外エラーですか?
このエラーの原因を突き止めました。これは、ラベルと出力の不一致が原因でした。たとえば、8 クラスの感情分類を行っていて、ラベルが (1,2,3,4,7,8,9,10) であるなどです。そのため、予測 (1,2,3,4,5,6,7,8) をラベルと一致させることができなかったため、範囲外のエラーが発生していました。私の質問は、なぜこの行c_loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits,Y)
でエラーが発生しなかったのか、in_top_k とは対照的に、この場合はラベルと予測をどのように一致させているのですか? 予測c_loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits,Y)
とラベルが同じではないため、エラーが発生するはずです。クロスエントロピー関数でターゲットが範囲外エラーにならないのはなぜですか?
これがエラー スタックです。
python - theano に加重バイナリ CrossEntropy を実装する方法は?
theano に加重バイナリ CrossEntropy を実装する方法は?
私の畳み込みニューラル ネットワークは 0 ~~ 1 (シグモイド) しか予測しません。
私はこのように私の予測にペナルティを課したい:
基本的に、モデルが 0 を予測したが、真実が 1 だった場合、MORE にペナルティを課したいと考えています。
質問: theano と lasagne を使用して、この加重バイナリ CrossEntropy関数を作成するにはどうすればよいですか?
私はこれを以下で試しました
しかし、私は以下のエラーを受け取ります:
TypeError: reshape の新しい形状は、ベクトルまたはスカラーのリスト/タプルでなければなりません。ベクトルへの変換後に Subtensor{int64}.0 を取得しました。
参考:https ://github.com/fchollet/keras/issues/2115
参考:https ://groups.google.com/forum/#!topic/theano-users/R_Q4uG9BXp8
tensorflow - 損失が増加する理由として考えられるのは?
4 つの異なる国からの画像の 40k 画像データセットがあります。画像には、屋外のシーン、都市のシーン、メニューなど、さまざまな主題が含まれています。深層学習を使用して画像にジオタグを付けたいと考えました。
学習タスクは簡単ではないため、3 つの conv->relu->pool レイヤーの小さなネットワークから始めて、さらに 3 つ追加してネットワークを深めました。
私の損失はこれを行っています(3層と6層のネットワークの両方で) ::
損失は実際にはスムーズに始まり、数百ステップで減少しますが、その後忍び寄り始めます.
私の損失がこのように増加する理由は何ですか?
私の初期学習率は 1e-6 と非常に低く設定されていますが、1e-3|4|5 も試しました。私は、クラスが異なる主題を持つ 2 つのクラスの小さなデータセットでネットワーク設計の健全性をチェックしましたが、損失は必要に応じて継続的に減少しています。列車の精度は約 40% で推移
python - 交差エントロピーは nan
conv-deconv ネットを展開しています。私の質問は、トレーニング中にクロス エントロピーが常に nan だったため、ソルバーが重みを更新しなかったことです。一日中コードをチェックしましたが、どこが間違っているのかわかりませんでした。以下は私のアーキテクチャです:これ
が私のクロスエントロピー関数です
ここで、ys の次元は [1,500,500,1]、ys_reshape は [250000,1]、relu4 は [1,500,500,1]、予測は [250000,1] です。ラベル行列 ys の値は {0,1} で、これは 2 つのカテゴリの密な予測です。
train_step を出力すると、None と表示されます。誰でも私を助けることができますか?
python - sparse_softmax_cross_entropy_with_logits を使用して、テンソルフローで加重クロス エントロピー損失を実装するにはどうすればよいですか
私は tensorflow (Caffe から来ています) を使い始めており、 loss を使用していますsparse_softmax_cross_entropy_with_logits
。この関数は0,1,...C-1
、ワンホット エンコーディングの代わりにラベルを受け入れます。ここで、クラス ラベルに応じて重み付けを使用したいと考えています。softmax_cross_entropy_with_logits
(1つのホットエンコーディング)を使用すると、行列乗算でこれを実行できる可能性があることを知っています.で同じことを行う方法はありますsparse_softmax_cross_entropy_with_logits
か?
classification - Caffe は負の損失値を生成します (lmdb を使用したマルチラベル分類)
lmdb データベースに基づいて複数のラベルを分類しようとしています。2 つの異なるデータベースを作成します。1 つは画像自体用で、もう 1 つはラベル用です。私の意図は、水平方向と垂直方向の角度に 2 つの異なるラベルを付けることです。つまり、label1 [0-360] label2 [0-360] です。
そうするために、私のコードは次のとおりです。
私は次のようにtrain.txt
見えます:とは整数です。/path/to/image label1 label2
label1
label2
私train_val.prototxt
はこのように見えます:
TEST フェーズの部分は同じです
私の損失レイヤーは次のようになります。