2017-05-16 8 views
2

Ich bin neu in Keras und ich versuche mein Netzwerk zu erstellen, die auf einem Kartenspiel lernen muss. Es benötigt 93 binäre Eingänge mit einer versteckten Schicht mit 40 Neuronen und ein einzelnes Ausgangsneuron, das eine Punktzahl berechnet (von 0 bis 25).Keras Eingabe Form Fehler

model = Sequential() 
model.add(Dense(input_dim=93, units=40, activation="sigmoid")) 
model.add(Dense(units=2, activation="linear")) 
sgd = optimizers.SGD(lr=0.01, clipvalue=0.5) 
model.compile(loss="mse", optimizer=sgd, learning_rate=0.01) 

ich zum ersten Mal bin versucht zu berechnen (eine Vorwärtspropagation tun) der 93 Eingänge

dies "s.toInputs()"

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

model.predict(np.array(s.toInputs()) 

aber ich bekomme der Fehler

ValueError: Error when checking : expected dense_1_input to have shape (None, 93) but got array with shape (93, 1)

Wie kann ich pa ss die richtigen Parameter?

Antwort

1

Eigentlich sollte s.toInputs() so aussehen

[[0,0,0, etc...],[0,1,0, etc...]]

Grundsätzlich müssen Sie sich mit der folgenden Form ein Array haben: (n_batches, n_attributes)

Sie haben 93 Attribute, also sollte dies den Trick tun, wenn Sie Tensorflow

verwenden 210
np.array(s.toInputs()).reshape(-1, 93) 

Vollarbeits Beispiel

model = Sequential() 
model.add(Dense(input_dim=93, units=40, activation="sigmoid")) 
model.add(Dense(units=2, activation="linear")) 
sgd = optimizers.SGD(lr=0.01, clipvalue=0.5) 
model.compile(loss="mse", optimizer=sgd, learning_rate=0.01) 

# random data 
n_batches = 10 
data = np.random.randint(0,2,93*n_batches) 
data = data.reshape(-1,93) 

model.predict(data) 
+0

Ich bekomme immer noch den gleichen Fehler (Ich druckte das Array und es war wie du gesagt hast), vielleicht ist mein Modell falsch? Mein Array enthält nur die Eingabe für das Netzwerk, was ist n_samples und n_attributes? – Ggs

+0

Verwenden Sie Theano oder Tensorflow? –

+0

Ich benutze theano – Ggs

1

Die Fehlermeldung informiert Sie, dass Ihre Daten die Form (None, 93) (None hier bedeutet, kann diese Dimension einen beliebigen Wert haben. Es ist die Anzahl Ihrer Proben) haben muss

Aber Ihre Eingangsdaten hat die Form (93,1). Beachten Sie, dass die Dimensionen umgekehrt sind. können Sie transponieren, um Ihre Daten in die richtige Form zu bringen:

model.predict(np.array(s.toInputs()).T) 
+0

Ich habe versucht, aber ich bekomme immer noch den gleichen Fehler. – Ggs

-1

Die Umbildung Sache gut funktioniert. Verformen Sie das Array zu (Batch_Size, your_input_dimensions)

+0

Ein Code-Snippet würde diese Antwort verbessern. –