我想将网络的更新权重(执行优化后)投影到一个特殊的空间中,在该空间中需要传递该张量的值。应用投影的函数获取一个numpy数组作为输入。有办法吗?
我使用tf.assign()作为解决方案,但是由于我的函数接受数组而不是张量,所以它失败了。
这是我想做的事的草图:
W = tf.Variable(...)
...
opt = tf.train.AdamOptimizer(learning_rate).minimize(loss, var_list=['W'])
W = my_function(W)
答案 0 :(得分:0)
tf.control_dependencies
似乎是您需要的
一个简单的例子:
import tensorflow as tf
var = tf.get_variable('var', initializer=0.0)
# replace `tf.add` with your custom function
addop = tf.add(var, 1)
with tf.control_dependencies([addop]):
updateop = tf.assign(var, addop)
config = tf.ConfigProto()
config.gpu_options.allow_growth = True # pylint: disable=no-member
with tf.Session(config=config) as sess:
sess.run(tf.global_variables_initializer())
updateop.eval()
print(var.eval())
updateop.eval()
print(var.eval())
updateop.eval()
print(var.eval())
输出:
1.0
2.0
3.0