2017-10-07 2 views
0

J'ai une séquence binaire d'entiers {0,1} et j'aimerais créer un modèle LSTM pour prédire le terme binaire suivant en fonction des 3 nombres précédents de la séquence. Ainsi, par exemple, compte tenu de la séquence de train [0,1,1,0,1,0,0,1], pour les 3 premiers chiffres [0,1,1], le modèle doit sortir le numéro 0, pour la séquence suivante [1,1,0] le modèle devrait sortir 1 et pour la séquence suivante [1,0,1] sortir 0 et ainsi de suite.Keras Modèle LSTM n'apprenant pas la séquence binaire

Pour ce faire, compte tenu de l'exemple ci-dessus, j'ai créé l'ensemble d'entrée de formation suivante nommée VECX

array([[[0], 
     [1], 
     [1]], 

     [[1], 
     [1], 
     [0]], 

     [[1], 
     [0], 
     [1]], 

     [[0], 
     [1], 
     [0]], 

     [[1], 
     [0], 
     [0]]]) 

et la formation correspondante ouput ensemble nommé vecY:

array([[0], 
[1], 
[0], 
[0], 
[1]]) 

J'ai aussi créé les keras suivants Réseau LSTM pour un plus grand ensemble d'entraînement

LSTM_net = Sequential() 
LSTM_net.add(LSTM(1,input_shape=(3,1))) 
LSTM_net.add(Dense(1,activation="softmax")) 
LSTM_net.compile(optimizer="adagrad", loss="binary_crossentropy",metrics=["accuracy"]) 
LSTM_net.fit(vecX,vecY,batch_size=256,epochs=100,verbose=2) 

Quand je m'entraîne thi modèle s il est bloqué avec une précision constante pendant le processus de formation

1s - loss: 0.7534 - acc: 0.4992 
Epoch 2/1000 
0s - loss: 0.7533 - acc: 0.4992 
Epoch 3/1000 
0s - loss: 0.7534 - acc: 0.4992 
Epoch 4/1000 
0s - loss: 0.7534 - acc: 0.4992 
Epoch 5/1000 
0s - loss: 0.7534 - acc: 0.4992 

Le a donné le modèle qualifié donne seulement 0 prévisions constantes pour toutes les entrées dans le jeu de train ou d'un test et il semble qu'il a rien appris du tout sur le séquence.

J'ai essayé d'autres activations comme le softmax, le sigmoïde et le linéaire mais je n'ai pas réussi à voir une amélioration de la précision. J'ai même essayé de l'ajuster avec shuffle = False mais j'ai obtenu les mêmes résultats.

Qu'est-ce que je fais mal?

+0

Si cette question concerne plus les méthodes d'apprentissage automatique que la programmation réelle, peut-être que les gars de https://stats.stackexchange.com peuvent vous aider – Sentry

+0

avez-vous utilisé relu ou l'une de ses variantes? –

Répondre

0

Softmax est pour la classification catégorique. Beaucoup de cours où un seul est correct. Il va toujours totaliser 1. Puisque vous n'avez qu'un seul cours, votre résultat sera toujours 1, quoi qu'il arrive. À la place, utilisez sigmoid.

+0

J'ai changé la fonction d'activation en 'sigmoid' mais j'ai quand même obtenu les mêmes résultats. J'ai essayé le code suivant: –

+0

Alors peut-être vous avez juste trop peu de paramètres. 1 cellule n'est pas vraiment une couche très brillante. –