2017-10-21 35 views
0

如何在使用tf.train.optimizer時在訓練步驟後捕獲體重更新?如何在使用tf.train.optimizer時捕獲體重更新

人們可以得到漸變,但我找不到任何有效的方法,除了找到他們以前的副本的權重差異。由於我已經將權重存儲爲字典的一部分,因此它變得單調乏味,關鍵是隱藏層,值是權重列表。

weights = { 
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1], 0, 0.1)), 
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2], 0, 0.1)), 
'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes], 0, 0.1)) 
} 
biases = { 
'b1': tf.Variable(tf.random_normal([n_hidden_1], 0, 0.1)), 
'b2': tf.Variable(tf.random_normal([n_hidden_2], 0, 0.1)), 
'out': tf.Variable(tf.random_normal([n_classes], 0, 0.1)) 
} 

回答

0
print(sess.run(weights['h1'])) 

在每個曆元的環的端部。

+0

這不會給每一步的差異 – Maxim

0

我認爲最簡單的方法是捕獲所有訓練的變量的快照之前和訓練步驟之後,並獲得差異:

with tf.Session() as session: 
    ... 

    def get_snapshot(): 
    return {var: value for var, value in zip(tf.trainable_variables(), session.run(tf.trainable_variables()))} 

    ... 

    snapshot_before = get_snapshot() 
    session.run([optimizer], feed_dict={x: train_x, y: train_y}) 
    snapshot_after = get_snapshot() 
    for var in tf.trainable_variables(): 
    print var.name, ' -> ', (snapshot_after[var] - snapshot_before[var]) 

如果通過context manager實現這看起來更漂亮。 就效率而言,這需要兩個額外的session.run()調用,但它比逐個評估每個變量要好得多。

相關問題