2016-01-26 9 views

risposta

8

Per visualizzare un'immagine da ciascun batch, è necessario recuperare il risultato dell'opzione tf.image_summary() ogni volta che si esegue un passaggio. Ad esempio, si ha la seguente configurazione:

images = ... 
loss = ... 
optimizer = ... 

train_op = optimizer.minimize(loss) 
init_op = tf.initialize_all_variables() 
image_summary_t = tf.image_summary(images.name, images, max_images=1) 

sess = tf.Session() 
summary_writer = tf.train.SummaryWriter(...) 
sess.run(init_op) 

... si potrebbe impostare il ciclo di formazione per catturare un'immagine per ogni iterazione come segue:

for _ in range(10000): 
    _, image_summary = sess.run([train_op, image_summary_t]) 
    summary_writer.add_summary(image_summary) 

Nota che cattura sintesi su ciascun lotto potrebbe essere inefficiente e probabilmente è necessario acquisire periodicamente il riepilogo per un addestramento più rapido.

MODIFICA: Il codice precedente scrive un riepilogo separato per ogni immagine, quindi il registro conterrà tutte le immagini, ma non tutte verranno visualizzate in TensorBoard. Se si desidera combinare i riepiloghi di visualizzare immagini da più lotti, si potrebbe fare la seguente:

combined_summary = tf.Summary() 
for i in range(10000): 
    _, image_summary = sess.run([train_op, image_summary_t]) 
    combined_summary.MergeFromString(image_summary) 
    if i % 10 == 0: 
     summary_writer.add_summary(combined_summary) 
     combined_summary = tf.Summary() 
+0

Ho cercato il tuo metodo, ma ha mostrato una sola immagine . Mi chiedo quale sia il tuo risultato? –

+0

Ho aggiunto un po 'al commento che potrebbe aiutarti a visualizzare le diverse immagini. – mrry

+0

Grazie per le note, ma sembra ancora non funziona. Il file di registro era solo 820k, che poteva contenere così tante immagini. A proposito, ho trovato riferimenti al metodo tf.Summary() e MergeFromString, questo è l'unico modo per farlo? –

2

sono stato in grado di risolvere questo con la creazione di un nuovo image_summary op per ciascun lotto. vale a dire sono andato da qualcosa che sembrava: (. Che, frustrante, è stato non aver fatto quello che mi aspettavo)

train_writer = tf.train.SummaryWriter('summary_dir') 
img = tf.image_summary("fooImage", img_data) 
for i in range(N_BATCHES): 
    summary, _ = sess.run([img, train_step]) 
    train_writer.add_summary(summary, i) 

Per ...

train_writer = tf.train.SummaryWriter('summary_dir') 
for i in range(N_BATCHES): 
    # Images are sorted in lexicographic order, so zero-pad the name 
    img = tf.image_summary("fooImage{:06d}".format(i), img_data) 
    summary, _ = sess.run([img, train_step]) 
    train_writer.add_summary(summary) 
Problemi correlati