2015-11-15 31 views

回答

2

您可以通過幾種方法來實現。

  • 這將創建你的副本:v2 = tf.Variable(v1)
  • 你也可以使用identity opv2 = tf.identity(v1)(我認爲這是做這件事的正確方法

這裏是一個代碼示例:

import tensorflow as tf 

v1 = tf.Variable([[1, 2], [3, 4]]) 
v_copy1 = tf.Variable(v1) 
v_copy2 = tf.identity(v1) 

init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init) 
a, b = sess.run([v_copy1, v_copy2]) 
sess.close() 

print a 
print b 

兩者都會打印出相同的張量

+0

如果我們想要淺層或深層複製,則沒有指定。我認爲假設它涉及深層複製更安全。在這種情況下tf.Variable(source_variable.initialized_value()) – siemanko

+0

@nivwusquorum你可以告訴我身份何時會失敗的例子嗎? –

+0

deepq學習需要q網絡的深層副本來代替目標網絡,例如.. – siemanko

2

該執行深拷貝

copied_variable = tf.Variable(source_variable.initialized_value()) 

它還處理intialization正確,即

tf.intialize_all_variables() 

將正確初始化source_variable,然後再複製值copied_variable

+0

仍在等待您的示例:http://stackoverflow.com/a/33717784/1090562 –

20

你問如何複製標題中的變量,但如何複製問題中的張量。讓我們看看不同的可能答案。

(1)你想創建一個張量具有當前存儲在變量,我們會打電話給var相同的值。

tensor = tf.identity(var) 

但要記住,「張」是評估時將有值的圖節點,您評估它的任何時候,它會搶的var當前值。您可以使用control flow ops such as with_dependencies()來查看變量更新的順序以及身份的時間。

(2)你想創建另一個變量和其值設置爲當前存儲在一個變量中的值:

import tensorflow as tf 
var = tf.Variable(0.9) 
var2 = tf.Variable(0.0) 
copy_first_variable = var2.assign(var) 
init = tf.initialize_all_variables() 
sess = tf.Session() 

sess.run(init) 

print sess.run(var2) 
sess.run(copy_first_variable) 
print sess.run(var2) 

(3)要定義一個變量和它的初始值設定爲相同的事情你已經初始化的變量(這是nivwu ..上述回答):

var2 = tf.Variable(var.initialized_value()) 

var2當你調用tf.initialize_all_variables會得到初始化。在已經初始化圖形並開始運行之後,您不能使用它來複制var。

+0

'with_dependencies()'更改,請參閱:http://stackoverflow.com/questions/37980078/tensorflow-has-no-attribute-依賴關係 –

+0

@dga關於你的觀點(1),只是沿tensor = tf.constant(var)的方式創建一個常數張量,這樣副本不會依賴於var嗎? – Alex