2016-06-19 13 views
24

Spesso desidero registrare le variabili python - come opposto ai tf tensori.Come creare manualmente un tf.Summary()

Nei documenti si dice che "è possibile passare un buffer di protocollo tf.Summary popolato con i propri dati" ma non ci sono documenti per tf.Summary e non sono riuscito a capire come usarlo.

Qualcuno sa come creare un sommario scalare in questo modo?

+2

Possibile duplicato di [Come si aggiunge un valore arbitrario a un riepilogo TensorFlow?] (Http://stackoverflow.com/questions/37530228/how-do-i-add-an-arbitrary-value-to-a -tensorflow-summary) – orome

risposta

40

È possibile creare un oggetto tf.Summary nel vostro programma Python e scrivere allo stesso tf.train.SummaryWriter oggetto che prende i riepiloghi tensorflow-prodotta con il metodo SummaryWriter.add_summary().

La classe tf.Summary è un Python protocol buffer wrapper per the Summary protocol buffer. Ogni Summary contiene un elenco di buffer di protocollo tf.Summary.Value, ciascuno con un tag e un valore "semplice" (in virgola mobile), uno image, uno histogram o uno audio snippet. Ad esempio, è possibile generare un riepilogo scalare da un oggetto Python come segue:

writer = tf.train.SummaryWriter(...) 
value = 37.0 
summary = tf.Summary(value=[ 
    tf.Summary.Value(tag="summary_tag", simple_value=value), 
]) 
writer.add_summary(summary) 
+0

Come creare un Riepilogo immagine, invece? – Marco

+1

Ho creato un elenco che mostra come creare i riepiloghi delle immagini: https://gist.github.com/gyglim/1f8dfb1b5c82627ae3efcfbbadb9f514#file-tensorboard_logging-py-L41 –

+0

Le ultime tre righe sono state eseguite ogni epoca? (Lo sto facendo da keras e sto cercando di capire dove mettere cosa - sto indovinando la riga 1 sul mio callback '__init__' e il resto' on_epoch_end() '?) –

4

Se si desidera registrare un valore python, è necessario creare un segnaposto che deve essere alimentato durante l'esecuzione dell'opzione tf.Summary.

Ecco un codice snipped

value_ = tf.placeholder(tf.float32, []) 
summary_op = tf.scalar_summary("value_log", value_) 
my_python_variable = 10 
# define everything else you need... 
# ... 
with tf.Session() as sess: 
    for i in range(0, 10): 
     sess.run(summary_op, feed_dict={value_: my_python_variable*i}) 
+1

Grazie, ma stavo esplicitamente chiedendo un modo per creare direttamente un protobuf di riepilogo in modo da evitare questo metodo ingombrante. –

1

avevo bisogno di fare molti aggiornamenti alla variabile di riepilogo personalizzato durante l'allenamento così ho implementato il mio in questo modo:

Prima della ciclo:

writer = tf.summary.FileWriter(log_folder) 
accuracy = None 
accuracy_summary = tf.Summary() 
accuracy_summary.value.add(tag='accuracy', simple_value=accuracy) 

All'interno del ciclo:

if i%20000 == 0: 
    accuracy = get_accuracy() 
    accuracy_summary.value[0].simple_value = accuracy 
    writer.add_summary(accuracy_summary, i) 

Suppongo che gli indici a value siano nell'ordine in cui le variabili sono state aggiunte al riepilogo.

Problemi correlati