2015-08-24 3 views
4

mon entrée est un vecteur de 200 dims, qui est généré au moyen du mot2vector de tous les mots d'un article, ma sortie est un vecteur 50 dims, qui est généré par les résultats LDA d'un article Je veux utiliser MSE comme la fonction de perte, mais la valeur de la perte toujours 0 mon code comme suit:la perte de mse toujours être 0 quand keras pour le sujet prédisent

<pre>model = Sequential() 
model.add(Dense(cols*footsize, 400,init = "glorot_uniform")) 
# model.add(LeakyReLU(alpha = 0.3)) 
model.add(Activation('relu')) 
model.add(Dropout(0.2)) 
model.add(Dense(400, 400,init = "glorot_uniform")) 
model.add(Activation('relu')) 
model.add(Dropout(0.2)) 
model.add(Dense(400, 50,init = "glorot_uniform")) 
model.add(Activation('softmax')) 
model.compile(loss='mse', optimizer='rmsprop')</pre> 

la sortie de l'écran comme suit: enter image description here

qui peut me dire pourquoi, merci!

Répondre

5

Tout d'abord, votre sortie est-elle un vecteur de prédictions à chaud? IE: la première classe est [1, 0, 0, ...] et la deuxième classe est [0, 1, 0, 0, ...]. Si tel est le cas, l'utilisation de l'activation softmax sur la couche de sortie est acceptable et vous rencontrez un problème de classification. Si vous faites un problème de classification (une sortie à chaud), vous ne pouvez pas utiliser MSE comme perte, utilisez une entropie croisée catégorielle. Softmax met à l'échelle la sortie de telle sorte que le nombre donné est une probabilité prédite d'une certaine classe. Wikipedia ici: https://en.wikipedia.org/wiki/Softmax_function

Si vous attendez que le vecteur de sortie soit des nombres réels, vous devez utiliser l'activation linéaire sur vos neurones de sortie.