python - mac - tensorflow neural network
Imprimir la pérdida durante el entrenamiento TensorFlow (2)
En lugar de simplemente ejecutar training_step, ejecute también el nodo cross_entropy para que se le devuelva su valor. Recuerda eso:
var_as_a_python_value = sess.run(tensorflow_variable)
le dará lo que quiere, para que pueda hacer esto:
[_, cross_entropy_py] = sess.run([train_step, cross_entropy],
feed_dict={x: batch_xs, y_: batch_ys})
para ejecutar el entrenamiento y extraer el valor de la entropía cruzada tal como se calculó durante la iteración. Tenga en cuenta que convertí ambos argumentos en sess.run y los valores devueltos en una lista para que ambos sucedan.
Estoy mirando el tutorial TensorFlow " MNIST para principiantes ML ", y quiero imprimir la pérdida de entrenamiento después de cada paso de entrenamiento.
Mi ciclo de entrenamiento actualmente se ve así:
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})
Ahora, train_step
se define como:
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
Donde cross_entropy
es la pérdida que quiero imprimir:
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
Una forma de imprimir esto sería calcular explícitamente cross_entropy
en el ciclo de entrenamiento:
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})
Ahora tengo dos preguntas con respecto a esto:
Dado que
cross_entropy
ya está calculado durantesess.run(train_step, ...)
, parece ineficaz calcularlo dos veces, requiriendo el doble de pases hacia adelante de todos los datos de entrenamiento. ¿Hay alguna forma de acceder al valor decross_entropy
cuando se calculó durantesess.run(train_step, ...)
?¿Cómo puedo imprimir un
tf.Variable
? Usarstr(cross_entropy)
me da un error ...
¡Gracias!
Puede recuperar el valor de cross_entropy
agregándolo a la lista de argumentos para sess.run(...)
. Por ejemplo, tu for
-loop podría reescribirse de la siguiente manera:
for i in range(100):
batch_xs, batch_ys = mnist.train.next_batch(100)
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
_, loss_val = sess.run([train_step, cross_entropy],
feed_dict={x: batch_xs, y_: batch_ys})
print ''loss = '' + loss_val
El mismo enfoque se puede usar para imprimir el valor actual de una variable. Digamos que, además del valor de cross_entropy
, quería imprimir el valor de un tf.Variable
llamado W
, podría hacer lo siguiente:
for i in range(100):
batch_xs, batch_ys = mnist.train.next_batch(100)
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
_, loss_val, W_val = sess.run([train_step, cross_entropy, W],
feed_dict={x: batch_xs, y_: batch_ys})
print ''loss = %s'' % loss_val
print ''W = %s'' % W_val