2016-07-10 8 views
3

Ich versuche, ein sehr einfaches RNN Beispiel mit Keras zu codieren, aber die Ergebnisse sind nicht wie erwartet.Simple Recurrent Neural Network Eingabeform

Mein X_train ist eine wiederholte Liste mit Länge 6000 wie: (6000, 1, 1)

Meine y_train eine wiederholte Liste mit Länge 6000 wie ist: 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, ...

ich dies zu formen formatiert 1, 0.8, 0.6, 0, 0, 0, 1, 0.8, 0.6, 0, ...

ich diese formatiert zu formen: (6000, 1)

In meinem Verständnis sollte das rekurrente neuronale Netz lernen, die 0.8 und 0.6 richtig vorherzusagen, weil es c erinnere mich an die 1 in X_train vor 2 Zeitschritten.

Mein Modell:

model=Sequential() 
model.add(SimpleRNN(input_dim=1, output_dim=50)) 
model.add(Dense(output_dim=1, activation = "sigmoid")) 
model.compile(loss="mse", optimizer="rmsprop") 
model.fit(X_train, y_train, nb_epoch=10, batch_size=32) 

Das Modell erfolgreich mit minimalem Verlust trainiert werden kann ~ 0,1015, aber die Ergebnisse sind nicht wie erwartet.

test case --------------------------------------------- model result -------------expected result 

model.predict(np.array([[[1]]])) --------------------0.9825--------------------1 

model.predict(np.array([[[1],[0]]])) ----------------0.2081--------------------0.8 

model.predict(np.array([[[1],[0],[0]]])) ------------0.2778 -------------------0.6 

model.predict(np.array([[[1],[0],[0],[0]]]))---------0.3186--------------------0 

Gibt es irgendwelche Hinweise, was ich hier falsch verstehe?

Antwort

6

Das Eingabeformat sollte dreidimensional sein: die drei Komponenten darstellen Probengröße, die Anzahl der Zeitschritte und Ausgang Dimension

Sobald in geeigneter Weise die RNN umformatiert tatsächlich die Zielsequenz und zur Vorhersage nicht verwalten.

np.random.seed(1337) 

sample_size = 256 
x_seed = [1, 0, 0, 0, 0, 0] 
y_seed = [1, 0.8, 0.6, 0, 0, 0] 

x_train = np.array([[x_seed] * sample_size]).reshape(sample_size,len(x_seed),1) 
y_train = np.array([[y_seed]*sample_size]).reshape(sample_size,len(y_seed),1) 

model=Sequential() 
model.add(SimpleRNN(input_dim = 1, output_dim = 50, return_sequences = True)) 
model.add(TimeDistributed(Dense(output_dim = 1, activation = "sigmoid"))) 
model.compile(loss = "mse", optimizer = "rmsprop") 
model.fit(x_train, y_train, nb_epoch = 10, batch_size = 32) 

print(model.predict(np.array([[[1],[0],[0],[0],[0],[0]]]))) 
#[[[ 0.87810659] 
#[ 0.80646527] 
#[ 0.61600274] 
#[ 0.01652312] 
#[ 0.00930419] 
#[ 0.01328572]]]