Sto osservando il tutorial "MNIST For ML Beginners" di TensorFlow e voglio stampare la perdita dell'allenamento dopo ogni passaggio di addestramento.Stampa della perdita durante l'allenamento TensorFlow
Il mio ciclo di formazione attualmente si presenta così:
for i in range(100):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
Ora, train_step
è definito come:
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
Dove cross_entropy
è la perdita che voglio stampare:
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
Un modo per stampare questo sarebbe calcolare esplicitamente cross_entropy
nel ciclo di formazione:
for i in range(100):
batch_xs, batch_ys = mnist.train.next_batch(100)
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
print 'loss = ' + str(cross_entropy)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
Ora ho due domande per quanto riguarda questo:
Dato che
cross_entropy
è già calcolato durantesess.run(train_step, ...)
, sembra inefficiente per calcolare due volte, che richiede il doppio del numero di inoltra i passaggi di tutti i dati di allenamento. C'è un modo per accedere al valore dicross_entropy
quando è stato calcolato durante ilsess.run(train_step, ...)
?Come si stampa addirittura un
tf.Variable
? Usandostr(cross_entropy)
mi dà un errore ...
Grazie!
Grazie. Quindi ogni volta che chiamo 'sess.run ([train_step, cross_entropy])', calcola ancora 'cross_entropy' una sola volta, giusto? Non fa un ulteriore passaggio in avanti per ciascuna delle variabili che passo? – Karnivaurus
Esatto - esegue esattamente lo stesso sottografo (poiché "cross_entropy' è già calcolato come parte della fase di addestramento), e aggiunge semplicemente un nodo aggiuntivo per recuperare il valore di" cross_entropy' indietro nel programma Python. – mrry
Grazie.Come punto a parte, dopo aver aggiornato il mio codice come suggerito, il valore di 'cross_entropy' diminuisce, in media, sul loop. Tuttavia, a volte in realtà aumenta da una iterazione di allenamento alla successiva. Questo accade per un intervallo di dimensioni dei gradini nella discesa del gradiente. È previsto? La perdita non diminuirà sempre dopo ogni iterazione, perché stai spostando i pesi in una direzione che dovrebbe ridurre questa perdita? Il grafico della perdita vs iterazione è qui: http://i.stack.imgur.com/f8B80.png – Karnivaurus