2016-08-23 7 views
2

テンソルフローのネット上でベクトルを生成しています。このベクトルは、私の出力であるsoftmaxに渡されます。softmaxの出力に0が含まれているとは思われません。

今私はこれをテストしており、奇妙なことに、ベクトル(softmaxを通過したもの)はすべての座標にゼロを持っています。

ソフトマックスの指数関数の定義に基づいて、これは起こりそうにないと仮定しました。これはエラーですか?

EDIT:私のベクトルは120x160 = 192000です。すべての値はfloat32

答えて

3

誤差ではない可能性があります。あなたはsoftmaxへの入力も見る必要があります。このベクトルは非常に負の値と単一の非常に正の値を持つ可能性が非常に高いです。これにより、すべてのゼロと単一の1つの値を含むsoftmax出力ベクトルが得られます。

正しく指摘したところでは、softmax分子は指数関数的にゼロにならないはずです。しかしながら、浮動小数点精度のために、分子は非常に小さい値、例えばexp(-50000)であり、本質的にゼロと評価される。

+0

あなたはまあまあでした。値はあまりにも負でも大きすぎもありませんでしたが、値を小さくして全体を正規化したlrnレイヤーを追加しました。 (計算時間が約2倍になりましたが、lrnにはGPUのメソッドがないため、GPUでネットをトレーニングしようとすると最終的に悪化する可能性があります)。 –

関連する問題