2017-03-15 12 views
0

X_trainKeras RNN LSTM Genauigkeit nicht

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

y_train

1 
1 
1 
0 
0 
1 

Die dritte und vierte Spalte in X_train sind ein klarer Indikator für die Ausgabe zu verändern. Ich probiere RNN mit LSTM aus, also habe ich diese Beispieldaten gewählt und möchte dies überarbeiten.

Die Genauigkeit Veränderung ist nicht alles auf einmal nach Epochen der Ausbildung -

Epoch 1/60 
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667 
Epoch 2/60 
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667 
Epoch 3/60 
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667 
Epoch 4/60 
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667 
Epoch 5/60 
6/6 [==============================] - 1s - loss: 5.3141 - acc: 0.6667 

Modell

model = Sequential() 
model.add(Embedding(MAX_NB_WORDS, embedding_vecor_length, input_length=max_length,batch_input_shape=(batch_size, input_dim))) 
model.add(LSTM(10, return_sequences=False)) 
model.add(Dense(1, activation='softmax')) 

Parameter

MAX_NB_WORDS = 10 
embedding_vecor_length = 32 
max_length = 10 
batch_size = 2 
input_dim = max_length 

Ich benutze Theano Backend. Vermutlich fehlt etwas sehr offensichtlich. Bitte helfen Sie!

UPDATE

Apologies für eine halbe gebackene Sachen bereitstellt. Ich bin Kompilieren des Modells so -

opt = SGD(lr=0.001) 
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy']) 
print(model.summary()) 

print np.shape(X_train) 

callbacks = [ 
      # EarlyStopping(monitor='val_loss', patience=3, verbose=2), 
      RemoteMonitor(root='http://localhost:9000'), 
      ModelCheckpoint(filepath="/tmp/weights.hdf5", monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto') 
     ] 

print X_train 
print y_train 

history = model.fit(X_train, y_train, nb_epoch=60, batch_size=batch_size, callbacks=callbacks) #, validation_data=(X_val, y_val) 

UPDATE2

diese Rektifiziertes durch die Aktivierungsfunktion von ‚softmax‘ auf ‚S-förmige‘ Ändern Eine richtige Erklärung fehlt. Ich denke, das "Warum" sollte die Antwort sein, nicht das Wie.

Antwort

0

Bevor ein Modell der Ausbildung, müssen Sie den Lernprozess konfigurieren, die die ‚Kompilierung‘ Methode erfolgt über - model.compile()

Dann wird Ihr Modell für die Ausbildung, werden Sie die ‚fit verwenden müssen 'Methode - model.fit()

Bitte lesen Sie mehr unter:

https://keras.io/getting-started/sequential-model-guide/

Okey, nachdem Sie weitere Informationen hinzugefügt habe ich einige Test ausgeführt haben. Zuerst habe ich eine weitere Zeile zu X_train hinzugefügt und y_train

X_train = 
[[0, 1, 1, 1, 1, 0, 0, 0, 0, 0,], 
[0, 1, 1, 1, 1, 0, 0, 0, 0, 0,], 
[0, 1, 1, 1, 0, 0, 0, 0, 0, 0,], 
[0, 1, 0, 0, 0, 1, 1, 0, 0, 0], 
[0, 1, 0, 0, 0, 1, 1, 0, 0, 0], 
[0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
[0, 1, 1, 1, 1, 0, 0, 0, 0, 0]] 

y_train = [[1],[1],[1],[0],[0],[1],[1]] 

auch veränderte batch_size 1.

und das Ergebnis war keine Überraschung:

Epoch 59/60 
1/7 [===>..........................] - ETA: 0s - loss: 1.1921e-07 - acc: 1.0000 
2/7 [=======>......................] - ETA: 0s - loss: 7.9712 - acc: 0.5000  
3/7 [===========>..................] - ETA: 0s - loss: 5.3141 - acc: 0.6667 
4/7 [================>.............] - ETA: 0s - loss: 3.9856 - acc: 0.7500 
5/7 [====================>.........] - ETA: 0s - loss: 3.1885 - acc: 0.8000 
6/7 [========================>.....] - ETA: 0s - loss: 5.3141 - acc: 0.6667 
7/7 [==============================] - 0s - loss: 4.5550 - acc: 0.7143 

in jeder Epoche die 7/7 step war immer der gleiche acc: 0.7143 aber andere (1/7, 2/7 und so weiter) waren eher zufällig. Meine Antwort ist:

Sie haben nicht genügend Daten, um das Modell zu trainieren. Auf diesem Datensatz tendiert netowork dazu, in so wenigen Schritten die beste Lösung zu finden, dass das Ergebnis immer gleich bleibt.In diesem Fall wird ein Ergebnis niemals etwas wert sein. Ich könnte falsch liegen, aber versuchen Sie es mit hunderten/tausenden von Daten zu testen

+0

Ich kompiliere und passe das Modell an. Aktualisierte Frage bitte überprüfen @Byte_me –

+0

aktualisiert auch –

+0

klingt gut ... auch ich erkannte, dass es die Lernrate ... Einstellung 0,1 für so kleine Daten machte es bewegen ... meine anfängliche Lernrate betrug 0,01 –