2017-05-04 5 views
3

Ich habe den neuesten TensorFlow (v1.1.0) installiert und ich habe versucht, das Tutorial tf.contrib.learn Quickstart auszuführen, wo Sie einen Klassifizierer für den IRIS-Datensatz erstellen möchten. Allerdings, wenn ich versucht:tf.contrib.learn load_csv_with_header arbeitet nicht in TensorFlow 1.1

training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
    filename=IRIS_TRAINING, 
    target_dtype=np.int, 
    features_dtype=np.float32) 

ich einen StopIteration Fehler bekam. Wenn ich die API überprüft habe, habe ich nichts über die load_csv_with_header() gefunden. Haben sie es in der neuesten Version geändert, ohne das Tutorial zu aktualisieren? Wie kann ich das beheben?

BEARBEITEN: Ich benutze Python3.6, wenn dies einen Unterschied macht.

Antwort

6

Dies ist aufgrund der Unterschiede zwischen Python 2 und Python 3. Hier ist mein Code unter dem für Python funktioniert 3.5:

if not os.path.exists(IRIS_TRAINING): 
    raw = urllib.request.urlopen(IRIS_TRAINING_URL).read().decode() 
    with open(IRIS_TRAINING, 'w') as f: 
     f.write(raw) 

if not os.path.exists(IRIS_TEST): 
    raw = urllib.request.urlopen(IRIS_TEST_URL).read().decode() 
    with open(IRIS_TEST, 'w') as f: 
     f.write(raw) 

Was wahrscheinlich, dass Ihr Code passiert ist, einen Dateinamen nach IRIS_TRAINING erstellt. Aber die Datei ist leer. So StopIteration is raised. Wenn Sie die Umsetzung der load_csv_with_header Blick in:

with gfile.Open(filename) as csv_file: 
    data_file = csv.reader(csv_file) 
    header = next(data_file) 

StopIteration ausgelöst wird, wenn next keine zusätzlichen Elemente erkennen, wie dokumentiert https://docs.python.org/3.5/library/exceptions.html#StopIteration

Beachten Sie die Änderung in meinem Code im Vergleich zu dem Python 2-Version zu lesen, wie gezeigt in Tensorflow Tutorial:

  1. urllib.request.urlopen statt urllib.urlopen
  2. decode() wird durchgeführt, nachdem read()
+0

Ich habe es einfach gemacht, indem ich @ Alexandres Antwort ansah. Tatsächlich war die Datei leer, und als ich sie manuell heruntergeladen habe, funktionierte es. Ich habe versucht, die "Anfrage" selbst zu verwenden, aber ich hatte am Ende keine Ahnung von dem 'decode()'. Ihre Antwort wird akzeptiert, da sie die Lösung für das Problem beim Herunterladen bietet. – TasosGlrs

+0

yeah Sie brauchen 'decode' wegen des Unterschiedes zwischen' str' und 'byte' type in Python 3.' read() 'return' byte' während 'write()' '' '' erwartet –

2

StopIteration sollte nur dort passieren, wenn die CSV-Datei leer ist. Haben Sie überprüft, dass der Pfad (IRIS_TRAINING) zu etwas aufgelöst wird, zu dessen Öffnen Sie berechtigt sind?

0

oder können Sie die CSV-Datei als binäre schreiben statt decode()

if not os.path.exists(IRIS_TRAINING): 
    raw = urllib.request.urlopen(IRIS_TRAINING_URL).read() 
    with open(IRIS_TRAINING, 'wb') as f: 
     f.write(raw) 
-1

hinzuzufügen, wenn die Antwort oben nicht funktioniert, Sie Ihren Weg des iris_training.csv angeben und iris_test.csv-Datei in der Methode urlopen().

Verwandte Themen