2016-04-18 12 views
7

Nachdem ich dieses Lernprogramm unter summaries and TensorBoard verfolgt habe, konnte ich erfolgreich Daten mit TensorBoard speichern und anzeigen. Ist es möglich, diese Daten mit etwas anderem als TensorBoard zu öffnen?TensorFlow: Öffnen von Protokolldaten, die von SummaryWriter geschrieben wurden

Übrigens ist meine Anwendung off-policy Lernen. Ich spare derzeit jedes State-Action-Belohnungstupel mithilfe von SummaryWriter. Ich weiß, dass ich diese Daten manuell speichern/trainieren könnte, aber ich dachte, es wäre schön, TensorFlows integrierte Protokollierungsfunktionen zu verwenden, um diese Daten zu speichern/zu laden.

Antwort

5

Ich denke, die Daten sind codierte ProtoBufs RecordReader-Format. Um serialisierte Strings aus Dateien zu erhalten, können Sie py_record_reader verwenden oder ein Diagramm mit TFRecordReader op erstellen und diese Strings für die Verwendung mit dem Ereignis schema deserialisieren. Wenn Sie ein funktionierendes Beispiel erhalten, aktualisieren Sie bitte dieses q, da wir dazu anscheinend keine Dokumentation haben.

3

Einfach, die Daten können tatsächlich in eine .csv Datei in TensorBoard unter der Registerkarte Ereignisse exportiert werden, die z. in einem Pandas-Datenrahmen in Python geladen werden. Stellen Sie sicher, dass Sie die Daten Download Links Box überprüfen.

Für einen automatisierten Ansatz, überprüfen Sie die TensorBoard out readme:

Wenn Sie möchten, um Daten exportieren an anderer Stelle sichtbar zu machen (zum Beispiel ipython Notebook), das auch möglich ist. Sie können auf den zugrunde liegenden Klassen direkt ab, die TensorBoard zum Laden von Daten verwendet: python/summary/event_accumulator.py (zum Laden von Daten aus einem einzigen Laufe) oder python/summary/event_multiplexer.py (zum Laden von Daten aus mehreren Durchläufen, und hält es organisiert). Diese Klassen laden Gruppen von Ereignisdateien, verworfene Daten, die durch TensorFlow abgestürzt sind, und organisieren die Daten nach Tag.

Als weitere Option gibt es ein Skript (tensorboard/scripts/serialize_tensorboard.py), die eine logdir geladen wird, wie TensorBoard tut, sondern auf Platte als json alle Daten aus schreiben, anstatt einen Server zu starten. Dieses Skript ist auf gesetzt "gefälschte TensorBoard Backends" zum Testen, so ist es ein bisschen rau um die Ränder.

+1

Als Tensorflow Version 1.1, diese Dateien (event_accumulator.py/event_multiplexer.py) nicht vorhanden sind, wurden sie refaktoriert. – shark8me

1

Ich habe etwas in diese Richtung für ein vorheriges Projekt getan. Wie von anderen erwähnt, ist der Hauptbestand tensorflows Ereignisspeicher

from tensorflow.python.summary import event_accumulator as ea 

acc = ea.EventAccumulator("folder/containing/summaries/") 
acc.Reload() 

# Print tags of contained entities, use these names to retrieve entities as below 
print(acc.Tags()) 

# E. g. get all values and steps of a scalar called 'l2_loss' 
xy_l2_loss = [(s.step, s.value) for s in acc.Scalars('l2_loss')] 

# Retrieve images, e. g. first labeled as 'generator' 
img = acc.Images('generator/image/0') 
with open('img_{}.png'.format(img.step), 'wb') as f: 
    f.write(img.encoded_image_string) 
5

Ab März 2017 das Werkzeug EventAccumulator has been moved von Tensorflow Kern zum Tensorboard Backend. Sie können es noch Daten aus Tensorboard Protokolldateien zu extrahieren, verwenden Sie wie folgt vor:

from tensorboard.backend.event_processing.event_accumulator import EventAccumulator 
event_acc = EventAccumulator('/path/to/summary/folder') 
event_acc.Reload() 
# Show all tags in the log file 
print(event_acc.Tags()) 

# E. g. get wall clock, number of steps and value for a scalar 'Accuracy' 
w_times, step_nums, vals = zip(*event_acc.Scalars('Accuracy')) 
+0

Nice @ Chris.Ich könnte alle event_acc ausdrucken: '{'scalars': [u'objektiv/weight-decay/l2_logits_layer/weights_0 ', u'objective/weight-decay/l2_conv_1/weights_0', u'objective/weight-decay/l2_dot_1/weights_0 ', u'objective/l1-Regularisierung/l1_conv_2/weights_0', u'test/Genauigkeit_1 ', u'objective/l1-Regularisierung/l1_dot_1/weights_0', u'objective/Weight-Decay/l2_dot_2/weights_0 ',. ..} Wie soll ich den Wert zum Beispiel drucken für: 'u'objective/weight-decay/l2_dot_2/weights_0''. Vielen Dank – Amir

0

Sie können auch die Verwendung tf.train.summaryiterator: Um Ereignisse in einem ./logs -Ordner zu extrahieren, wo nur klassische Skalare lr, acc, loss, val_acc und val_loss vorhanden sind, können Sie diese GIST verwenden: tensorboard_to_csv.py

Verwandte Themen