Durchlaufen des Datasets einmal zur Testzeit im Tensorflow

8

Was ist der beste Weg, einen einzelnen Durchlauf über einen Datensatz zu machen, um Testdaten auszuwerten? Ich möchte vermeiden, das Datenladen in Python zu scripten und ein feed_dict zu verwenden. Stattdessen möchte ich die gesamte TF-Infrastruktur für Warteschlangen, Stapelverarbeitung usw. verwenden.

Im cifar Beispiel , Die Anzahl der Testbeispiele ist fest codiert und der Code benötigt num_test_examples/batch_size Schritte, um eine Auswertung durchzuführen. Es scheint, als sollte es einen besseren Weg geben, dies zu tun, indem man die Batching-Infrastruktur benutzt.

Es scheint, dass das Standardmuster darin besteht, den Lauf zu stoppen, wenn Sie eine von der Warteschlange ausgelöste Ausnahme abfangen. Ich habe einige Dinge ausprobiert, so dass sich die Warteschlange beschwert, wenn es keine weiteren Beispiele mehr gibt, die die Warteschlange füllen können (dh der Produzent kann nicht mehr produzieren). Dies ist nicht die Ausnahme, die Sie fangen möchten. Sie möchten abfangen, wenn der Konsument nichts mehr zu konsumieren hat, dh die Warteschlange leer ist. Wie mache ich das?

Was machen Sie auch, wenn die Anzahl der Testbeispiele nicht durch eine Batch-Größe teilbar ist (z. B. die Anzahl der Testbeispiele ist prim).

Zusätzliche Informationen:

In der Praxis bewerten wir Testdaten während des Lernens oft mehrfach, indem wir eine Funktion do_evaluation() aufrufen. Yaroslavs Antwort ist nützlich, wenn Sie die Testdaten nur einmal verarbeiten möchten. Im Idealfall würde jeder Aufruf von do_evaluation genau einmal jedes Beispiel im Test-Dataset durchlaufen. Wir benötigen einen Mechanismus, um den Dosierer zurückzusetzen, so dass Sie ihn noch einmal übergehen können. Hier ist ein Code dafür. Verwenden Sie nicht den Befehl limit_epochs . Es wird ein Batcher benötigt, der nicht mischt und die Anzahl der Batches im Testset angibt (dies funktioniert nicht, wenn die Anzahl der Beispiele nicht durch Minibatchgröße teilbar ist). Die Funktion gibt eine neue Operation zum Abrufen von Daten zurück, die tf.errors.OutOfRangeError wirft, wenn Sie den gesamten Satz durchlaufen haben. Der zweite Rückgabewert ist ein Op, der aufgerufen werden sollte, um den Zähler zurückzusetzen. Dies sollte der erste Aufruf innerhalb einer do_evaluation() -Funktion sein.

%Vor%     
DBelanger 25.02.2016, 19:46
quelle

0 Antworten

Tags und Links