我知道TensorFlow中有tf.assign
函数,但此函数主要针对可变张量(tf.Variable
)。如何修改张量的值?例如,以下代码
import numpy as np
import tensorflow as tf
X = tf.placeholder(tf.float32, shape=[None, 32, 32, 3])
conv1 = tf.layers.conv2d(X, filters=64, kernel_size=(3, 3), padding='same',name='conv1')
relu1 = tf.nn.relu(conv1)
conv2 = tf.layers.conv2d(relu1, filters=64, kernel_size=(3, 3), padding='same',name='conv2')
relu2 = tf.nn.relu(conv2)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
tensor = sess.graph.get_tensor_by_name(u'conv2/Conv2D:0')
feature_map = tf.reduce_mean(tensor[:,:,:,24])
image = np.random.uniform(size=(1,32,32,3))
sess.run([feature_map], feed_dict={X: image})
如何修改feature_map
的值并且不影响其派生?
更具体地说,当我更改feature_map
的值时,它不会影响其派生过程。
例如,y = a^2
,y'= 2a
,我只需要将a = 1
更改为a = 2
。
Other_op = tf.gradients(feature_map, X)
不同的feature_map
会实现不同的值,但它不会破坏操作的图形结构。
答案 0 :(得分:1)
那是不可能的。张量是tf.Operation
的输出。来自documentation:
Tensor是
Operation
的一个输出的符号句柄。它不保存该操作的输出值,而是提供在TensorFlowtf.Session
中计算这些值的方法。
所以你不能独立改变它的价值。
答案 1 :(得分:1)
在您的示例中,feature_map
没有值,因为它是一个操作。因此,你无法改变它的价值。您可以做的是在feed_dict
的{{1}}参数中传递另一个值。
例如,如果你的feature_map后面跟着这样的操作:
session.run
然后您可以通过other_op = tf.gradient(feature_map, X)
更改传递给该操作(在这种情况下为gradient
)的值,如下所示:
feed_dict