Falsche Anzahl von Abmessungen auf model.fit

Ich versuche, diese SimpleRNN zu laufen:

model.add(SimpleRNN(init='uniform',output_dim=1,input_dim=len(pred_frame.columns))) model.compile(loss="mse", optimizer="sgd") model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.index),show_accuracy=True) 

Der Fehler ist auf model.fit, wie Sie unten sehen können:

 File "/Users/file.py", line 1496, in Pred model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.index),show_accuracy=True) File "/Library/Python/2.7/site-packages/keras/models.py", line 581, in fit shuffle=shuffle, metrics=metrics) File "/Library/Python/2.7/site-packages/keras/models.py", line 239, in _fit outs = f(ins_batch) File "/Library/Python/2.7/site-packages/keras/backend/theano_backend.py", line 365, in __call__ return self.function(*inputs) File "/Library/Python/2.7/site-packages/theano/compile/function_module.py", line 513, in __call__ allow_downcast=s.allow_downcast) File "/Library/Python/2.7/site-packages/theano/tensor/type.py", line 169, in filter data.shape)) TypeError: ('Bad input argument to theano function with name "/Library/Python/2.7/site-packages/keras/backend/theano_backend.py:362" at index 0(0-based)', 'Wrong number of dimensions: expected 3, got 2 with shape (88, 88).') 

Der Fehler sagt mir, dass es die falsche Anzahl von Dimensionen hat, es sollte 3 sein und es hat nur 2. Was sind die Dimensionen, auf die es sich bezieht?

2 Solutions collect form web for “Falsche Anzahl von Abmessungen auf model.fit”

Du versuchst ein RNN zu laufen. Dies bedeutet, dass Sie vorherige Zeitschritte in Ihre Berechnung aufnehmen möchten. Um dies zu tun, müssen Sie Ihre Daten vorverarbeiten, bevor Sie es der SimpleRNN-Schicht geben.

Zur Vereinfachung gehen wir davon aus, dass anstelle von 88 Samples mit 88 Features jeweils 8 Samples mit jeweils 4 Features vorhanden sind. Nun, bei der Verwendung eines RNN müssen Sie sich für ein Maximum für die Backpropagation entscheiden (dh die Anzahl der vorherigen Zeitschritte, die in der Berechnung enthalten sind). In diesem Fall können Sie wählen, um maximal 2 vorherige Zeitschritte einzuschließen. Für die Berechnung der Gewichte des RNN müssen Sie also bei jedem Schritt die Eingabe des aktuellen Zeitschritts (mit seinen 4 Funktionen) und die Eingabe der 2 vorherigen Zeitschritte (jeweils mit jeweils 4 Features) vornehmen. Genau wie in dieser Visualisierung:

 sequence sample0 sample1 sample2 sample3 sample4 sample5 sample6 sample7 0 |-----------------------| 1 |-----------------------| 2 |-----------------------| 3 |-----------------------| 4 |----------------------| 5 |----------------------| 

Also, anstatt eine (nb_samples, nb_features) Matrix als Eingabe für die SimpleRNN zu geben, musst du ihm eine (nb_sequences, nb_timesteps, nb_features) geformte Eingabe geben. In diesem Beispiel bedeutet es, dass anstatt einen (8×4) Eingang geben Sie ihm einen (5x3x4) Eingang.

Die keras Einbettungsschicht könnte diesen Job machen, aber in diesem Fall kannst du auch einen kurzen Code dafür schreiben:

 input = np.random.rand(8,4) nb_timesteps = 3 # 2 (previous) + 1 (current) nb_sequences = input.shape[0] - nb_timesteps #8-3=5 input_3D = np.array([input[i:i+nb_timesteps] for i in range(nb_sequences)]) 

Der Fehler ist wahrscheinlich, weil Ihre Eingabe-Dimensionen nicht im Format von:

 (nb_samples, timesteps, input_dim) 

Es erwartet 3 Dimensionen, und du (88,88) nur 2 von ihnen (88,88) .

Python ist die beste Programmiersprache der Welt.