2017-11-26 12 views
0

Ich bin neu zu Keras und RNN Ich brauche ein Classifier-Modell mit LSTM RNN in Keras für ein Dataset, die einen Zug Satz von Form (1795575, 6) und Etiketten-Array enthalten Form (1795575, 1). Die Etiketten sind 11 Klasse (von 0 bis 10) Der Testsatz von Form (575643, 6) und Labels Array von Form (575643, 1.Again, die Etiketten ist 11 (von 0 bis 10)Wie man ein LSTM Classifier Modell in Keras

Wie kann ich die folgende Keras Modell formen meine Dataset.What Werte zu erfüllen, sollte ich für?

from keras.models import Sequential 
from keras.layers import LSTM, Dense 
from keras.optimizers import SGD 
import numpy as np 
data_dim = ? 
timesteps = ? 
num_classes = ? 
batch_size = ? 
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) 
model = Sequential() 
model.add(LSTM(32, return_sequences=True, stateful=True,batch_input_shape= 
(batch_size, timesteps, data_dim))) 
model.add(LSTM(32, return_sequences=True, stateful=True)) 
model.add(LSTM(32, stateful=True)) 
model.add(Dense(?, activation='softmax')) 
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd', 
metrics=['accuracy']) 
model.fit(train_X_arr, train_y_arr,batch_size=batch_size, epochs=epochs, 
shuffle=False,validation_data=(test_X_arr, test_y_arr)) 

habe ich schätze Ihre Hilfe und Dank in ein dvance

+0

Es hängt von Ihrem Problem ab. Was bedeuten die Zeitstempel in Ihrem Problem? Was die Sequenzen in Ihren Daten darstellen? .. Ich frage, weil nach den Formen, die Sie gaben, sollten Sie eine andere Architektur verwenden (und nicht lstm ..) –

+0

Vielen Dank Samuel für Ihre Antwort. Ich muss ein RNN-Netzwerk zu Intrusion Detection implementieren –

+0

Noch eine Frage :) -> Sie schrieb, dass "ein Dataset, die einen Zug Satz von Form enthalten (1795575, 6)", so bedeutet, dass Sie 1795575 Beispiele im Zug haben Set und jedes Beispiel ist ein Vektor mit 6 Elementen (Skalaren) oder bedeutet es, dass Ihre Trainingsdaten eine unbekannte Anzahl von Beispielen enthalten, aber jedes Beispiel ein Vektor von 1795575 Zeitstempeln ist und jeder Zeitstempel ein Vektor aus 6 Elementen ist? –

Antwort

0

Was würden Sie tun, ist dies:

from keras.models import Sequential 
from keras.layers import LSTM, Dense 
from keras.optimizers import SGD 
import numpy as np 
data_dim = 1 # EACH TIMESTAMP IS SCALAR SO SHAPE=1 
timesteps = 6 # EACH EXAMPLE CONTAINS 6 TIMESTAMPS 
num_classes = 1 # EACH LABEL IS ONE NUMBER SO SHAPE=1 
batch_size = 1 # TAKE SIZE THAT CAN DIVIDE THE NUMBER OF EXAMPLES IN THE TRAIN DATA. THE HIGHER THE BATCH SIZE THE BETTER! 
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) 
model = Sequential() 
model.add(LSTM(32, return_sequences=True, stateful=True,batch_input_shape= 
(batch_size, timesteps, data_dim))) 
model.add(LSTM(32, return_sequences=True, stateful=True)) 
model.add(LSTM(32, stateful=True)) 
model.add(Dense(1, activation='softmax')) # AT THE END YOU WANT ONE VALUE (LIKE THE LABELS) -> SO DENSE SHOULD OUTPUT 1 NODE 
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd', 
metrics=['accuracy']) 
model.fit(train_X_arr, train_y_arr,batch_size=batch_size, epochs=epochs, 
shuffle=False,validation_data=(test_X_arr, test_y_arr)) 

und das ist es.

EDIT: Darüber hinaus stellen Sie sicher, dass Sie Ihre Zugdaten umformen: (1795575, 6,1) -> 1795575 Beispiele, jeder hat 6 Zeitstempel, jeder Zeitstempel ist skalar.
Das erreichen Sie einfach mit np.expand_dims (train_data, -1).

+0

@ Dvir Samuel Danke für Hilfe, ich formte meine Zugdaten passend (1795575, 6,1). Wenn ich jedoch den Code mit Batch_Size von 32 versuchte, bekam ich den folgenden Fehler: "In einem Stateful-Netzwerk sollten Sie nur pas s Eingänge mit einer Anzahl von Proben, die durch die Losgröße geteilt werden können. Gefunden: 1795575 Samples ". Ich habe versucht, 1795575, ich habe den folgenden Fehler" In einem statusbehafteten Netzwerk sollten Sie nur Eingaben mit einer Anzahl von Proben, die durch die Losgröße geteilt werden können. Gefunden: 575643 Proben. Dann habe ich versucht, eine Losgröße von 1 zu setzen, es wird gearbeitet –

+0

Oh ich sehe, das Modell ist State-Full. Sie sollten Batch-Größe eine Zahl geben, die 1795575 wie 1,5,15 usw. teilen (alle diese können 1795575 teilen). Also, wenn Batch_size = 1 funktioniert ok mach dir keine Sorgen, aber wenn Sie Probleme sehen, empfehle ich höhere Werte für Batch_size. (Und übrigens, ich würde mich freuen, wenn Sie meine Antwort aufwerten und akzeptieren :)) –

+0

@ Dvir Samuel Vielen Dank.Ich habe eine andere Frage, wenn ich den gleichen Datensatz mit einer anderen Anzahl von TimeStamps sagen 10 und 5 habe, muss ich 6 "Zeitschritte = 6 # Jedes Beispiel enthält 6 TIMESTAMPS" zu 10 oder 5 und das Modell passt wahrscheinlich? –