tutorial neural network mac instalar found for python tensorflow

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:

  1. Dado que cross_entropy ya está calculado durante sess.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 de cross_entropy cuando se calculó durante sess.run(train_step, ...) ?

  2. ¿Cómo puedo imprimir un tf.Variable ? Usar str(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