Python 通过输入变量的值来更新变量

Python 通过输入变量的值来更新变量,python,tensorflow,Python,Tensorflow,我有一个TensorFlow模型,我希望有一个选项来检索和更新权重(即,检查点机制之外)。因为我可能会多次这样做,所以我不想在每次这样做时都将节点添加到图中,而是可以调用一些op来完成。我的想法是让tf.为更新的变量和值分配使用相同变量的ops,并在feed_dict中提供新的权重值;比如说: weights_assigns = [tf.assign(v, v) for v in tf.trainable_variables()] weights_update = tf.group(*weigh

我有一个TensorFlow模型,我希望有一个选项来检索和更新权重(即,检查点机制之外)。因为我可能会多次这样做,所以我不想在每次这样做时都将节点添加到图中,而是可以调用一些op来完成。我的想法是让
tf.为更新的变量和值分配使用相同变量的
ops,并在
feed_dict
中提供新的权重值;比如说:

weights_assigns = [tf.assign(v, v) for v in tf.trainable_variables()]
weights_update = tf.group(*weights_assigns)

# Now to update the weights
weights = [...]  # List of new weight values
feed_dict = {v: w for v, w in zip(tf.trainable_variables(), weights)}
tf.run(weights_update_op, feed_dict=feed_dict)
在我看来,这应该将传入
feed_dict
的值作为变量的当前值,然后通过
tf.assign
操作存储它们。但是,这不起作用,并且给了我一些关于意外值类型的奇怪错误

我当前的替代方案是使用一些辅助节点(变量或占位符),并在赋值操作中用作值:

weights_updates = [tf.placeholder(v.dtype, v.get_shape()) for v in tf.trainable_variables()]
weights_assigns = [tf.assign(v, u) for v, u in zip(tf.trainable_variables(), weights_updates)]
weights_update_op = tf.group(*weights_assigns)

# Now to update the weights
weights = [...]  # List of new weight values
feed_dict = {u: w for u, w in zip(weights_updates, weights)}
tf.run(weights_update_op, feed_dict=feed_dict)

这真的是唯一的方法吗?还是有其他我看不到的明显方式?

好吧,我发现有一个load()方法:


也许这会有帮助?

谢谢你的回答,但我的问题是我实际上想在会话中保留给定的值,并在下一次调用
run
时使其可用。在每次调用
run
时都给出所需的值是可能的,但对我来说这不是一个实际的解决方案。删除了令人困惑的评论,用测试过的代码更新了答案。太棒了,这正是我想要的。我个人更希望在图形中有一个显式的op来完成这项工作,因为这样我可以将它存储在一些图形集合中,以便稍后运行,但我想这就是他们制作API的方式。谢谢
with tf.Graph().as_default():
    w = tf.get_variable('weights', shape=[3, 3], 
                        initializer=tf.random_uniform_initializer(dtype=tf.float32))
    init = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init)
        print('initial W:')
        print(sess.run(w))
        new_vals = np.reshape(np.arange(9, dtype=np.float32), (3,3))
        w.load(new_vals)
        print('updated W:')
        print(sess.run(w))