2016-09-30 6 views
3

Tensorflowでは、私はクラシファイアネットワークと不均衡なトレーニングクラスを持っています。さまざまな理由から、私はアンバランスなデータを補うためにリサンプリングを使用することはできません。したがって、私は、他の手段による不均衡を補うように強制されます。具体的には、それぞれのクラスの例数に基づいて重みを重みで乗算します。私はこれが好ましい方法ではないことを知っていますが、リサンプリングはオプションではありません。私の練習損失はtf.nn.softmax_cross_entropy_with_logitsです(私もtf.nn.sparse_softmax_cross_entropy_with_logitsを試してみるかもしれません)。Tensorflow:クロスエントロピーによるスケールロット

WARNING:Tensorflowドキュメントは、これらのオペレーションの説明に次のものが含まれ、それは効率のために内部logitsにソフトマックス を行うので、このOPは、スケーリングされていないlogitsを期待します。 softmaxの出力を としてこのオペレーションを呼び出さないでください。間違った結果が生じる可能性があります。

私の質問:のみを参照上記の警告は、ソフトマックスによって行わスケーリングされ、またはそれは、任意のタイプのいずれかのロジットスケーリングが禁止されているを意味するのでしょうか?後者の場合、私のクラスのバランスをとったロジットスケーリングが誤った結果を引き起こしていますか?

おかげで、

ロン

+0

あなたに適したソリューションを見つけたのかどうかは不思議です。私も同様の課題に直面しており、他の人たちがそれに対処する方法が不思議です。 –

+0

私は、各例のクロスエントロピーに、例題の真のクラスの重みを疑問の結果を掛けて試してみました。私はデータを再サンプリングすることに頼った。 –

答えて

1

警告がちょうどtf.nn.softmax_cross_entropy_with_logitsクロスエントロピーを計算する前に、入力logitsにsoftmaxを適用することが通知されます。クロスエントロピーの結果が非常に異なるため、この警告はsoftmaxを2回適用することを避けるためです。ここで

tf.nn.softmax_cross_entropy_with_logitsを実装する関数については、関連する source code内のコメントです:この実装は、あなた自身を置くべきではありません注意点と、パフォーマンスを向上させるためのものである、警告状態として

// NOTE(touts): This duplicates some of the computations in softmax_op 
// because we need the intermediate (logits -max(logits)) values to 
// avoid a log(exp()) in the computation of the loss. 

softmax (実際にはやや便利です)。

強制的にsoftmaxが計算を妨げる場合は、おそらく別のAPIがtf.nn.sigmoid_cross_entropy_with_logitsまたはtf.nn.weighted_cross_entropy_with_logitsに役立つ可能性があります。


実装はどのスケーリングが結果に影響を与えること、しかし、指示していないようです。私は、線形スケーリング関数は元のlogitの再分割を保持する限り、うまくいくはずです。しかし、入力ロットに適用されるものが何であれ、tf.nn.softmax_cross_entropy_with_logitsは、クロスエントロピーを計算する前にsoftmaxを適用します。

関連する問題