Tensorflow (python): "ValueError: Setzen eines Array-Elements mit einer Sequenz" in train_step.run (...)

8

Ich versuche ein einfaches logistisches Regressionsmodell zu implementieren, das mit meinen eigenen Bildern trainiert wurde, aber ich bekomme diesen Fehler, wenn ich versuche, das Modell zu trainieren:

%Vor%

Die Daten, die ich an train_step.run({x: batch_xs, y_: batch_ys}) füttere, sind wie folgt:

  • batch_xs: Liste von Tensor-Objekten, die Bilder von 100x100 (10.000 lange Tensoren) darstellen
  • batch_ys: Liste der Labels als Floats (1.0 oder 0.0)

Was mache ich falsch? Danke im Voraus!

EDIT 1 : Das Problem war, dass ich die Tensoren in batch_xs auswerten musste, bevor ich sie an train_step.run(...) übergab. Ich dachte, die Run-Methode würde dafür sorgen, aber ich glaube, ich lag falsch? Wie auch immer, also einmal, bevor ich die Funktion aufgerufen habe:

%Vor%

BEARBEITEN 2 : Ich hatte mehrere Probleme, selbst nachdem ich das getan habe, was in den Antworten unten vorgeschlagen wurde. Ich habe schließlich alles behoben, indem ich die Tensoren weggelassen und numpige Arrays benutzt habe.

Hoffe das hilft jemand anderem

    
mathetes 08.12.2015, 13:03
quelle

2 Antworten

18

Dieser spezielle Fehler kommt von numpy . Der Aufruf von np.array für eine Sequenz mit inkonsistenten Dimensionen kann sie auslösen.

%Vor%

An dem Punkt, an dem tf sicherstellt, dass alle Elemente von feed_dict numpy.array s sind, scheint es fehlzuschlagen.

Überprüfen Sie Ihre feed_dict .

    
mdaoust 08.12.2015, 13:36
quelle
5

Das feed_dict Argument für Operation.run() (auch Session.run() und Tensor.eval() ) akzeptiert eine Wörterbuchzuordnung Tensor Objekte (normalerweise tf.placeholder() Tensoren) zu einem numplien Array (oder Objekten, die trivial in ein numpy Array konvertiert werden können).

>

In Ihrem Fall übergeben Sie batch_xs , das ist eine Liste von numpy Arrays, und TensorFlow weiß nicht, wie man dies in ein numpy Array umwandelt. Nehmen wir an, dass batch_xs wie folgt definiert ist:

%Vor%

Wir können batch_xs in ein 32 x 100 x 100 Array konvertieren, indem wir Folgendes verwenden:

%Vor%

Beachten Sie, dass, wenn batch_ys eine Liste von Floats ist, diese durch TensorFlow transparent in ein 1-D-Numpy-Array konvertiert wird, so dass Sie dieses Argument nicht konvertieren müssen.

EDIT: mdaoust macht einen gültigen Punkt in den Kommentaren: Wenn Sie eine Liste von Arrays in np.array übergeben (und daher als Wert in einem feed_dict ), wird es automatisch vstack ed, es sollte also nicht notwendig sein, Ihre Eingabe wie vorgeschlagen zu konvertieren. Stattdessen klingt es so, als ob die Formen Ihrer Listenelemente nicht übereinstimmen. Fügen Sie Folgendes hinzu:

%Vor%

... vor dem Aufruf von train_step.run() , und dies sollte zeigen, ob Sie nicht übereinstimmen.

    
mrry 08.12.2015 17:05
quelle

Tags und Links