上演訓練不同的從屬圖形我試圖執行兩個任務(A和B),其具有輸入端和inp_A
和inp_B
對應輸出out_A
,out_B
。兩個在tensorflow
任務A首先通過Graph g_A
實現。任務A完成後,我希望使用g_A
的權重到新圖g_B
這是一個更大的圖(g_A
的超集)。
我不確定如何在tensorflow中做到這一點。
上演訓練不同的從屬圖形我試圖執行兩個任務(A和B),其具有輸入端和inp_A
和inp_B
對應輸出out_A
,out_B
。兩個在tensorflow
任務A首先通過Graph g_A
實現。任務A完成後,我希望使用g_A
的權重到新圖g_B
這是一個更大的圖(g_A
的超集)。
我不確定如何在tensorflow中做到這一點。
我使用這種拆分爲訓練和驗證的目的,在這裏我創建專用的輸入和輸出管道,但共享圖形的開始部分,雖然我使用相同圖(截至tf.Graph()
)但不同的(不連接的)子圖在其內。
在一個tf.Graph()
一般概念是variable sharing您可以通過使用tf.variable_scope()
,以便將變量的概念,他們創建和使用tf.get_variable()
重新獲取他們(而不是直接使用tf.Variable()
)實現。第一次調用它會創建變量,第二次它將重用它們 - 只要變量的名稱保持不變即可。
但是我發現它更容易使用tf.make_template()
代替,這將包裹創建一個子完全並在每次調用創建圖形的新實例,同時共享所有變量的函數。 該文檔的例子是
def my_op(x, scalar_name):
var1 = tf.get_variable(scalar_name,
shape=[],
initializer=tf.constant_initializer(1))
return x * var1
create_instance = tf.make_template('scale_by_y', my_op, scalar_name='y')
z = create_instance(input1)
w = create_instance(input2)
在此,每次調用create_instance
會創建一個名爲scale_by_y
在執行同時共享其內部變量由my_op()
定義的操作的圖表新節點。 (在該示例中,參數scalar_name
靜態綁定到值y
,導致變量scale_by_y/y
在圖中創建(並重新使用)。我發現該問題比有用的更困惑。) 它並不關心父項適用範圍,所以
with tf.variable_scope('training'):
z1 = create_instance(input1)
with tf.variable_scope('validation'):
z2 = create_instance(input2)
的作品。它也可能或不可以在不同的tf.Graph()
實例中工作,但我對此表示懷疑。