Ich benutze Keras, und die letzte Schicht verwendet eine 'Softmax' Aktivierungsfunktion. Wenn ich jedoch die Wahrscheinlichkeiten vorhersage und summiere, bekomme ich nicht 1. Warum ist das?Warum ist die Summe von model.predict (x) kleiner als 1 mit softmax und LSTM?
N.B. : Ich bin wirklich weit von 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)
EDIT: ich mit einem einfachen Code getestet
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))
Und ich bekomme Ergebnisse wie
[ 0.50027865 0.49804032 0.49545377 0.50514281 0.50069857]
OKAY, so mit Dense und SimpleRNN, ich bekomme fast 1. Das Problem könnte einfach sein, dass die Aktivierung nicht dasselbe Verhalten bei wiederkehrenden Layern hat, da GRU die gleichen Probleme hat. Ich fragte auf GitHub: https://github.com/fchollet/keras/issues/6255
Sorry, sollte ich genau bereiter sein können! Ich bin sehr weit von 1 ... – Labo
@Labo Könnte es ein Unterlauf/Überlauf-Problem sein? Diese [link] (https://stats.stackexchange.com/questions/149663/robust-softmax-solutions-for-theano) auf robuste softmax Lösung kann relevant sein. – dhinckley
Ich hatte Überläufe in Keras, und es verursacht im Allgemeinen "Nan" als Werte erscheinen. Ich habe keine Ahnung, was hier vor sich geht. – Labo