2016-06-29 15 views
5

Ich möchte eine grundlegende RNN erstellen, die zwei Bytes hinzufügen kann. Hier sind die Eingangs- und Ausgangssignale, die aus einer einfachen Addition zu erwarten sindDimensionskonflikt in LSTM Keras

X = [[0, 0], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0]] 

Das heißt, X1 = 00101111 und X2 = 01110010

Y = [1, 0, 1, 0, 0, 0, 0, 1] 

I das folgende aufeinanderfolgenden Modell erstellt

model = Sequential() 
model.add(GRU(output_dim = 16, input_length = 2, input_dim = 8)) 
model.add(Activation('relu'`)) 
model.add(Dense(2, activation='softmax')) 
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy']) 
model.summary() 

Der Fehler I bekommen ist etwas entlang

erwartet lstm_input_1 3 Dimensionen haben, bekam aber Array mit Form (8L, 2L)

Also, wenn ich die Maße erhöhen, indem X

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

dann die Fehler Änderungen

erwartet Veränderung lstm_input_1 zu haben Form (None, 8, 2) aber bekam Array mit Form (8L, 1L, 2L)

Antwort

3

In Keras erwarten die Sequential Modelle eine Eingabe der Form (batch_size, sequence_length, input_dimension). Ich vermute, dass Sie die zwei letzten Dimensionen Ihres Eingabearrays ändern müssen. Beachten Sie, dass die Batch-Dimension nicht explizit definiert ist.

3

ändern X [[[0, 0], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0]]] so dass seine Form (1, 8, 2)

2

Keras als Eingabe von 3D-Daten requiers, wie irrtümlich angegeben. Es sind Samples, Zeitschritte, Features. Da du (8L, 2L) Keras hast, wird es als 2D - [Samples, Features] genommen. Um es zu beheben, so etwas wie dies

def reshape_dataset(train): 
    trainX = numpy.reshape(train, (train.shape[0], 1, train.shape[1])) 
    return numpy.array(trainX) 

x = reshape_dataset(your_dataset) 

jetzt sollte X8L,1,2L sein, das ist [Proben, Zeitschritte, verfügt] - 3D