我正在使用keras,最後一層使用'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]
好了,所以和SimpleRNN,我幾乎得到1.問題可能僅僅是激活與循環圖層不同,因爲GRU具有相同的問題。 我在GitHub上問過:https://github.com/fchollet/keras/issues/6255
對不起,我本來應該更精確!我離1很遠...... – Labo
@Labo它可能是下溢/溢出問題嗎? 這個[link](https://stats.stackexchange.com/questions/149663/robust-softmax-solutions-for-theano)關於穩健的softmax解決方案可能是相關的。 – dhinckley
我在Keras中溢出了,它通常會導致「nan」出現爲值。我不知道這裏發生了什麼。 – Labo