2017-06-21 4 views
3

Ich muss die Verlusthistorie im Laufe der Zeit abrufen, um sie grafisch darzustellen. Hier ist mein Skelett Code:So erhalten Sie Verlustfunktionsverlauf mithilfe von tf.contrib.opt.ScipyOptimizerInterface

optimizer = tf.contrib.opt.ScipyOptimizerInterface(loss, method='L-BFGS-B', 
options={'maxiter': args.max_iterations, 'disp': print_iterations}) 
optimizer.minimize(sess, loss_callback=append_loss_history) 

Mit append_loss_history Definition:

def append_loss_history(**kwargs): 
    global step 
    if step % 50 == 0: 
     loss_history.append(loss.eval()) 
    step += 1 

Wenn ich die ausführliche Ausgabe von ScipyOptimizerInterface zu sehen, wird der Verlust tatsächlich im Laufe der Zeit verringern. Aber wenn ich loss_history drucke, sind die Verluste im Laufe der Zeit fast gleich.

finden Sie im doc: https://www.tensorflow.org/api_docs/python/tf/contrib/opt/ScipyOptimizerInterface „Variablen unterliegen Optimierung sind an Ort und Stelle AM ​​ENDE OPTIMIERUNG aktualisiert“. Ist das der Grund dafür, dass der Verlust unverändert ist?

Antwort

2

Ich denke, dass Sie das Problem haben; die Variablen selbst werden nicht bis zum Ende der Optimierung geändert (stattdessen being fed to session.run calls), und die Auswertung eines "Rückkanal" Tensors erhält die nicht modifizierten Variablen. Verwenden Sie stattdessen das fetches Argument optimizer.minimize auf den session.run Anrufe huckepack, die die Feeds haben angegeben:

import tensorflow as tf 

def print_loss(loss_evaled, vector_evaled): 
    print(loss_evaled, vector_evaled) 

vector = tf.Variable([7., 7.], 'vector') 
loss = tf.reduce_sum(tf.square(vector)) 

optimizer = tf.contrib.opt.ScipyOptimizerInterface(
    loss, method='L-BFGS-B', 
    options={'maxiter': 100}) 

with tf.Session() as session: 
    tf.global_variables_initializer().run() 
    optimizer.minimize(session, 
        loss_callback=print_loss, 
        fetches=[loss, vector]) 
    print(vector.eval()) 

(Modified vom example in the documentation). Dies druckt Tensoren mit den aktualisierten Werten:

98.0 [ 7. 7.] 
79.201 [ 6.29289341 6.29289341] 
7.14396e-12 [ -1.88996808e-06 -1.88996808e-06] 
[ -1.88996808e-06 -1.88996808e-06] 
Verwandte Themen