2

我有一個包含多個變量的多個作用域的網絡。我需要一種方法來設置特定變量或名稱範圍的訓練能力,以便它們不被更新並且不包含在梯度計算中,然後在某些條件後將其設置爲可訓練。它甚至有可能嗎?如果是,如何?動態設置張量流量的訓練能力變量

with tf.name_scope('layer1'): 
    w = tf.Variable(...) 
    b = tf.Variable(...) 
    ... some function ... 
with tf.name_scope('layer2'): 
    w = tf.Variable(...) 
    b = tf.Variable(...) 
    ... some function ... 
with tf.name_scope('layer3'): 
    w = tf.Variable(...) 
    b = tf.Variable(...) 
    ... some function ... 

我想改變的變量列車能力第一範圍,因爲它們正在從一個預先訓練文件恢復,他們已經得知。所以,我想訓練其他層中的變量,直到他們被學習,然後將第一個範圍中的變量的訓練能力設置回True,並將它們一起訓練。你可以使用

+0

純文本問題很少被接受。請顯示您在代碼中所做的事情。 –

+0

你可以傳遞一個'variable_list'給minimizer來決定更新哪個變量。 – soloice

回答

2

一件事是var_list參數優化每一個具有:https://www.tensorflow.org/api_docs/python/tf/train/Optimizer

文檔說:

var_list:變量對象的可選名單進行更新,以儘量減少損失。默認爲GraphKeys.TRAINABLE_VARIABLES下的圖表中收集的變量列表。

你的情況,你可以說:

optimizer = GradientDescentOptimizer(0.01) 
optimizer.minimize(loss,[w1,w2]) 

讓我們知道,如果這有助於!

+1

是否可以從var_list中刪除或添加任何變量,該變量默認爲GraphKeys.TRAINABLE_VARIABLES下的圖中收集的變量列表? –

+1

你可以做的是創建多個優化器,並在一段時間後選擇另一個... – rmeertens