2017-08-27 3 views
0

Ich versuche, ein LSTM mit Keras auf meinem benutzerdefinierten Features-Set auszuführen. Ich habe Zug- und Testfunktionen in separaten Dateien. Jede CSV-Datei enthält 11 Spalten mit der letzten Spalte als Klassenbezeichnung. Es gibt insgesamt 40 Klassen in meinem Datensatz. Das Problem ist, dass ich nicht in der Lage bin, die richtige input_shape für die erste Ebene herauszufinden. Ich hatte alle Stackoverflow und Github erkundet aber immer noch nicht in der Lage, dies zu lösen Unten ist mein vollständiger Code.Formkonflikt in LSTM in Keras

import numpy 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.layers import LSTM 

numpy.random.seed(7) 

train_dataset = numpy.loadtxt("train.csv", delimiter=",") 
X_train = train_dataset[:, 0:10] 
y_train = train_dataset[:, 10] 

test_dataset = numpy.loadtxt("test.csv", delimiter=",") 
X_test = test_dataset[:, 0:10] 
y_test = test_dataset[:, 10] 

model = Sequential() 

model.add(LSTM(32, return_sequences=True, input_shape=X_train.shape)) 
model.add(LSTM(32, return_sequences=True)) 
model.add(LSTM(32)) 
model.add(Dense(1, activation='softmax')) 
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy']) 
model.fit(X_train, y_train, batch_size=10, epochs=1) 

score, acc = model.evaluate(X_test, y_test, batch_size=10) 
print('Test score:', score) 
print('Test accuracy:', acc * 100) 

Was ich in input_shape Parametern Widerrist ändere ich Fehler in dem ersten LSTM Schicht in Fit-Verfahren.

Antwort

1

Sie haben keine Zeitdimension in Ihrer Eingabe. Der Eingang für RNN sollte (batch_size, time_step, features) sein, während Ihr Eingang die Dimension (batch_size, features) hat.

Wenn Sie Ihre 10 Spalten einer nach dem anderen verwenden Sie das Array neu gestalten sollte mit numpy.reshape(train_dataset, (-1, train_dataset.shape[1], 1))

Versuchen Sie diesen Code:

train_dataset = numpy.loadtxt("train.csv", delimiter=",") 
train_dataset = numpy.reshape(train_dataset, (-1, train_dataset.shape[1], 1)) 

X_train = train_dataset[:, 0:10] 
y_train = train_dataset[:, 10] 

test_dataset = numpy.loadtxt("test.csv", delimiter=",") 
test_dataset = numpy.reshape(test_dataset, (-1, train_dataset.shape[1], 1)) 

X_test = test_dataset[:, 0:10] 
y_test = test_dataset[:, 10] 

model = Sequential() 

model.add(LSTM(32, return_sequences=True, input_shape=(X_train.shape[1], 1))) 
model.add(LSTM(32, return_sequences=True)) 
model.add(LSTM(32)) 
model.add(Dense(1, activation='softmax')) 
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy']) 
model.fit(X_train, y_train, batch_size=10, epochs=1) 

score, acc = model.evaluate(X_test, y_test, batch_size=10) 
print('Test score:', score) 
print('Test accuracy:', acc * 100) 
+0

Leider bin ich nicht in der Lage, es zu bekommen. –

+0

@KhurramShehzad versuchen Sie das neue Snippet und wenn es nicht funktioniert, posten Sie den Fehler. – Muller20

+0

Es gab einen Fehler bei 'model.fit (X_train, categorical_labels, epoches = 30)' und der Fehler ist 'ValueError: Fehler beim Überprüfen des Ziels: erwartetes dose_1 hat Form (None, 1), aber Array mit Shape (7810, 41) ' –