我想动态确定已使用其初始化变量的张量(不是初始化值,而是张量初始化器!)。例如:
var1 = tf.Variable(tf.random_normal(shape=(2, 2)))
var2 = tf.Variable(var1.<some method that returns tf.random_normal(shape=(2, 2)>)
Variable.initialized_value()
和Variable.initial_value
都返回值本身。
有什么建议吗?
答案 0 :(得分:0)
我发现这样做有点丑陋,我在发贴,以防其他人感兴趣:
import tensorflow as tf
import re
var1 = tf.Variable(tf.random_normal(shape=(2, 2)))
shape = var1.initializer.outputs[0].shape
input_ = var1.initializer.node_def.input[1]
tensor_name = (input_ if re.search(r'\d+$', input_) is None
else '_'.join(input_.split('_')[:-1]))
var2 = tf.Variable(tf.__dict__[tensor_name](shape=shape))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(var1.eval())
print(var2.eval())
# [[ 0.23845878 -1.1440094 ]
# [ 0.593299 -1.1108586 ]]
# [[ 1.1235769 1.1481414 ]
# [ 1.8934027 -0.33171055]]
无论如何,如果有人可以提供一种更清洁的方式来进行此操作,我会感到很高兴。
编辑
这仅在初始化张量具有默认名称时有效。
更新
这是一种更好的方法:
import tensorflow as tf
var1 = tf.Variable(tf.random_normal(shape=(2, 2), mean=1, stddev=3))
var2 = tf.contrib.copy_graph.copy_variable_to_graph(var1, var1.graph)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(var1.eval())
print(var2.eval())
# [[1.7009485 0.9412894]
# [1.0769905 1.3085879]]
# [[ 5.8595214 8.652523 ]
# [ 1.86671 -3.170361 ]]