問題タブ [softmax]
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 - テンソルフローの sparse_softmax_cross_entropy_with_logits 関数の元のコーディングはどこですか
テンソルフロー関数sparse_softmax_cross_entropy_with_logitsが数学的に正確に何をしているのか知りたいです。しかし、コーディングの起源を見つけることができません。手伝って頂けますか?
layer - cuDNN APIで「cudnnSoftmaxBack()」のパラメータ「dy」をフィードする方法は?
cuDNN を使用して LeNet-5 に実装し、MNIST データセットでネットをトレーニングしたいと考えています。
ネットの最後のレイヤーは「Softmax」で、フォワード処理で関数「cudnnSoftmaxForward()」を使用します。そして、後戻り処理で関数「cudnnSoftmaxBackward()」を使いたいのですが、関数「cudnnSoftmaxBackward()」のパラメータの1つ「dy」がわかりません。
NVIDIA が提供する関数「cudnnSoftmaxtBackward」は次のとおりです。
API では、「dy」が「input_diff」を意味することはわかっていますが、softmax レイヤーは最後のレイヤーです。関数「cudnnSoftmaxBackward()」の「input_diff」をフィードするにはどうすればよいですか? 「ネットワークターゲット出力」と「ネットワーク実際の出力」の差分をフィードすることはできますか?
python - どうやってこの数字を手に入れたのですか?
私はこのコードを持っています:
これはこれを生成します:
どうやってそのプロットを手に入れたのかわかりません。大きなスコアが大きな確率を与えるべきであることは理解していますが、プロットを取得できません。numpy.ones_likeもあまり役に立ちませんでしたね。:)
編集:
私は何を求めているのか不明な投票を得たので、私はこれを尋ねています. に[0.8360188027814407, 0.11314284146556014, 0.050838355752999165]
適用されたソフトマックスの結果であるベクトルから、どのようにしscores
てそのプロットを得たのですか. つまり、その背後にあるロジックは何ですか?
スコア( の後vstack()
)は次のとおりです。
python - 150x150 画像での基本的なソフトマックス モデルの実装
私はテンソルフローの学習で、基本的なsoftmax MNISTの例を自分の画像セットで動作するように適応させようとしました。建物の航空写真で、屋根の種類ごとに分類したいと思います。このような 4 つの分類があります。
単純な (おそらくナイーブな) アイデアは、画像のサイズを変更し (すべて同じではないため)、それらを平坦化することでした。次に、コード内のテンソル形状を変更して実行します。もちろん効かないけど。まずはコードをお見せしましょう。
ご覧のとおり、ソフトマックスから y 値を出力しています。結果は、もっぱらこのように見えるテンソルです[0., 0., 0., 1.]
。これはかなり奇妙だと思いました。だから私はの値を印刷しましたtf.matmul(x, W) + b
。
結果は次のとおりです。
softmax を手動で計算する最初の 2 番目と 3 番目の要素では、E-200 のオーダーの数値が得られ、基本的にはゼロです。そして、4 番目の要素の 1 より大きい数値。すべてが明らかにこのパターンに従っているため、何かが間違っています。
今、私は入力をチェックしました。私の答えはそのような1つのホットベクトルとして[0, 1, 0, 0]
あり、私の画像は平坦化され、値は0と1に正規化されています(フロート)。MNIST の例と同じです。
また、MNIST の例では、matmul の値がはるかに小さいことに気付きました。E0のオーダー。これは、22500 ではなく、各画像に 784 の要素があるためですか? これが問題の原因ですか?
なんらかの理由でこれがうまくいかないかもしれません。助けが必要です。
編集:画像サイズが影響しているかどうかを確認することにしました.matmulがより小さな数値を与えることを確認してください. ただし、それらはまだパターンを示しているため、もう一度ソフトマックスを実行すると、次の出力が得られました。
その場合、何か他のものが間違っているに違いありません。
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 - NCE またはサンプリングされたソフトマックスを使用して TensorFlow 言語モデルをトレーニングする
TensorFlow RNN チュートリアルを適応させて、NCE 損失またはサンプリングされたソフトマックスを使用して言語モデルをトレーニングしていますが、それでも問題を報告したいと考えています。しかし、私が得る困惑は非常に奇妙です: NCE の場合、数百万 (ひどい!) を取得しますが、サンプルされたソフトマックスの場合、1 エポック後に 700 の PPL を取得します (本当であるにはあまりにも良い?!)。私は何が間違っているのだろうか。
PTBModel への私の適応は次のとおりです。
このモデルへの呼び出しは次のようになります。
ここでは特別なことはしていません。損失関数の変更は非常に簡単です。では、なぜうまくいかないのでしょうか。
ありがとう、ヨリス
c++ - Caffe での入力次元、SoftmaxWithLoss、ラベルについて
C++ からの独自のデータを使用して、独自のトレーニング済みネットワークを使用しようとしています。レイヤーを使用して「.jpg」データでネットワークをトレーニングおよびテストしたImageData
後、基本的なカフェの例「classification.cpp」を実装して、画像を 1 つずつメモリに渡しました。結果として、2 つのクラス (
1 - オブジェクト、
2 - 環境) の確率を知る必要があります。
通常の目的での私の入力レイヤーは次のようになります。
出力層:
テスト段階では、ネットは精度 = 0.93 を達成しましたが、現在 C++ を通常に使用していると、基本的な概念が理解できず、モデルの解析中にエラーが発生します。
1x3x256x256 = 196608 ですが、なぜこのラベル数が必要なのですか? 「classification.cpp」の例のように、「labels.txt」というファイルがあります。
なぜ != クラスにラベルを付けるのですか? SoftmaxWithLoss と入力ディメンションはどうすればよいですか?
deep-learning - 弁別制限付きボルツマン マシン用の Softmax 層
- 4 層の RBM を使用して DBN を作成しています。(各レイヤーには 21 個のノードがあります)
- 最後のレイヤーでは、ラベル データ、具体的には 2 つのクラスを追加しています (この DBN はバイナリ分類子です。クラス ラベル データを追加した後、最上位レイヤーに 21+2=23 ノードがあります)。
- 最後のレイヤーの出力をクラス ラベル入力と組み合わせて、2 セルのベクトルにソフトマックスしています (位置 0 の 1 はクラス 0 を示し、位置 1 の 1 はクラス 1 を示します)。
質問 - 1. CD-k を使用して、このソフトマックス層をトレーニングする必要がありますか? つまり、出力層と最後の (拡張された) 層の間で CD を作成する必要がありますか?
層から出力層への最後の接続の重みをどのように初期化しますか?
あるいは、下層に対して CD-k を使用して 21+2 ユニットの最上層をトレーニングする必要がありますか?
ありがとう。私はこの論文を見ています - http://machinelearning.org/archive/icml2008/papers/601.pdf
python - tensorflow によるセマンティック セグメンテーション - 損失関数の ValueError (sparse-softmax)
だから、マービン・タイヒマンのテンソルフロー-fcnに基づいて、完全な畳み込みネットワーク(FCN)の構築に取り組んでいます
私の入力画像データは、とりあえず750x750x3のRGB画像です。ネットワークを実行した後、損失の計算に形状 [batch_size, 750,750,2] のロジットを使用します。
これは二項分類です。ここには 2 つのクラスがあり、[0, 1] のラベル ([batch_sizex750x750] の形状) があります。これらは以下の損失関数に入ります。
これらは、再形成後のロジットとラベルの形状です。
そしてここで、次のような ValueError がスローされます。
以下の完全なトレースバック:
提案?私の実装はtf.add_to_collection('losses', cross_entropy)
間違っていますか?
アップデート:
cross_entropy
上記のコードを損失として直接返すことにより、ピクセル全体で合計せずに(またはそう思う)これを実行しようとしました。
うまくいったようです。(現在ValueError
、トレーニング オプティマイザ関数から がスローされ、次のように記述さNo gradients provided for any variable
れています。
更新 2:
上記 (勾配がないため ValueError に関して) は些細なことでした。hereで述べたように、このメッセージは通常、定義された tf.Variable オブジェクトと最小化されている損失テンソルの間にパスがない場合に発生します。
ただし、の使用に関する最初の問題は解決しtf.add_n
ません。TensorFlow で Graph コレクションがどのように機能するかの仕組みに関係していると思います。変数を初期化すると、エラーは次のようになります。