問題タブ [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.
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 フェーズの部分は同じです
私の損失レイヤーは次のようになります。
tensorflow - Tensorflow R0.12 softmax_cross_entropy_with_logits ASSERT エラー
私は、「softmax_cross_entropy_with_logits」を 147 クラスの問題のコスト関数の一部として機能させることに取り組んできました。「sigmoid_cross_entropy_with_logits」で動作するコードがありますが、softmax に移行したいと考えています。
ランク 3 からランク 2 に変更してコードを機能させるために、さまざまな試みを何度も試みましたが (役に立ちませんでした)、立ち往生しました。ノートブックでいくつかのおもちゃのコードを試してみましたが、softmax_cross .... はエラーをアサートしません。また、float32 を float64 にキャストしようとしましたが (ノートブックの例では 64 ビットを使用して動作していたため)、それでもエラーがアサートされました。
おもちゃのコードは次のとおりです。
これが私のコードフラグメントです:(サイズは以下にエラーで印刷されています)
私がやろうとしているのは、結果ごとに2つのエンコードされた「単語」があるため、単語ごとに個別にエラーを計算しようとしていますが、まだ機能しませんでした. 上記の最初の行でエラーが発生します。
ここで何が起こっているのでしょうか?エラーは「範囲」機能によるものと思われますが、何が間違っているのかわかりません。
tensorflow - Tensorflow - 損失が高く始まり、減少しない
私はテンソルフローでニューラルネットワークを書き始めましたが、サンプルプロジェクトのそれぞれに直面しているように見える問題が1つあります。
私の損失は常に 50 かそれ以上から始まり、減少しないか、減少したとしてもゆっくりと減少するため、すべてのエポックの後、許容可能な損失率に近づくことさえできません。
すでに試したこと(結果に大きな影響はありませんでした)
- 過適合でテストされていますが、次の例では、15000 のトレーニングと 15000 のテスト データセット、および 900 のニューロンのようなものがあることがわかります
- さまざまなオプティマイザーとオプティマイザー値をテストしました
- テストデータをトレーニングデータとしても使用して、トレーニングデータを増やしてみました
- バッチサイズを増減してみました
https://youtu.be/vq2nnJ4g6N0の知識でネットワークを作成しました
しかし、私のテストプロジェクトの1つを見てみましょう:
名前のリストがあり、性別を仮定したかったので、生データは次のようになります。
それをネットワークに供給するために、名前をcharCodeの配列に変換し(最大長は30を想定)、性別をビット配列に変換します
出力層として [30,20]、[20,10]、[10,10]、[10,2] の 3 つの隠れ層を持つネットワークを構築しました。すべての隠れ層には活性化関数として ReLU があります。出力層にはソフトマックスがあります。
次に、損失、精度、およびトレーニング操作の計算を行います。
100 のバッチでネットワークをトレーニングします
そして、次の結果が得られます。
私は何を間違っていますか?
私のプロジェクトで ~69 から始まり、それ以下にならないのはなぜですか?
どうもありがとうございました!
tensorflow - TensorFlow のロジットという単語の意味は何ですか?
次の TensorFlow 関数では、最終層で人工ニューロンの活性化をフィードする必要があります。私は理解しています。しかし、なぜロジットと呼ばれるのかわかりませんか?それは数学関数ではありませんか?