tensorflow:如何分配更新的 numpy

tensorflow: how to assign an updated numpy

我是 tensorflow 的新手,我正在尝试了解它的行为;我正在尝试定义会话范围之外的所有操作,以优化计算时间。 在以下代码中:

import tensorflow as tf
import numpy as np  
Z_tensor = tf.Variable(np.float32( np.zeros((1, 10)) ), name="Z_tensor")
Z_np = np.zeros((1,10))
update_Z = tf.assign(Z_tensor, Z_np)

Z_np[0][2:4] = 4

with tf.Session() as sess:
    sess.run(Z_tensor.initializer)
    print(Z_tensor.eval())
    print(update_Z.eval(session=sess))

我得到了输出:

[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

相反,我期望输出:

[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
[[0. 0. 4. 4. 0. 0. 0. 0. 0. 0.]]

似乎Z_np数组在赋值操作中没有更新,我不明白为什么。 不操作

  update_Z = tf.assign(Z_tensor, Z_np)

Z_np做一个link?

当您使用 tf.assign 时,它需要一个张量作为第二个参数。因为您提供了一个 Numpy 数组,它会自动将其提升为一个 CONSTANT 张量,并在那一刻将其放置在图中。因此,您对 Numpy 数组所做的任何更改都不会对 TensorFlow 图产生任何影响。为了获得所需的功能,您应该使用占位符:

Z_placeholder = tf.placeholder(tf.float32, Z_np.shape)

with tf.Session() as sess:
    sess.run(Z_tensor.initializer)
    print(Z_tensor.eval(feed_dict={Z_placeholder: Z_np}, session=sess))
    Z_np[0][2:4] = 4
    print(Z_tensor.eval(feed_dict={Z_placeholder: Z_np}, session=sess))