私はケラスを使用しています。最後のレイヤーでは、「softmax」アクティベーション機能が使用されています。 しかし、確率を予測して合計すると、私は1を得ません。 なぜですか?softmaxとLSTMでmodel.predict(x)の合計が1未満になるのはなぜですか?
N.B. : 私は1から本当に遠く午前:
>>> m
<keras.models.Sequential object at 0x1083fdf60>
>>> m.layers[-1].activation
<function softmax at 0x1092bfea0>
>>> X.shape
(1940, 10, 48)
>>> m.input
<tf.Tensor 'lstm_1_input:0' shape=(?, 10, 48) dtype=float32>
>>> model.predict(X)[:10].sum(axis=-1)
array([ 0.46206102, 0.43193966, 0.4252567 , 0.44023705, 0.46344867,
0.48820126, 0.50369406, 0.49789378, 0.46433908, 0.44102359], dtype=float32)
>>> y=model.predict(X)
>>> y[0]
array([ 0.00000000e+00, 6.10233226e-04, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 1.12394022e-03,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.55960268e-04, 0.00000000e+00,
4.60170895e-01], dtype=float32)
編集:私は簡単なコード
import numpy as np
from keras.models import *
from keras.layers import *
m = Sequential()
m.add(LSTM(3, input_shape=(3,2), activation='softmax'))
print(m.predict(np.random.rand(5,3,2)).sum(axis=-1))
でテストされ、私が高密度になるよう、
[ 0.50027865 0.49804032 0.49545377 0.50514281 0.50069857]
OKAYのような結果を得る し、 SimpleRNN、私はほぼ1になります。GRUには同じ問題があるので、問題は単純に活性化が反復層で同じ動作ではないことがあります。 私はGitHubで尋ねました:https://github.com/fchollet/keras/issues/6255
申し訳ありませんが、私はより正確にされている必要があります!私は1から非常に遠いです... – Labo
@Laboそれはアンダーフロー/オーバーフローの問題かもしれませんか? 堅牢なsoftmaxソリューションに関するこの[link](https://stats.stackexchange.com/questions/149663/robust-softmax-solutions-for-theano)は関連性があります。 – dhinckley
Kerasにオーバーフローがあり、一般的に "nan"が値として表示されます。私はここで何が起こっているのか分かりません。 – Labo