如何更改TensorFlow中不是tf.Variable的张量值?

时间:2018-01-09 13:57:17

标签: python tensorflow neural-network deep-learning variable-assignment

我知道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^2y'= 2a,我只需要将a = 1更改为a = 2

Other_op = tf.gradients(feature_map, X)

不同的feature_map会实现不同的值,但它不会破坏操作的图形结构。

2 个答案:

答案 0 :(得分:1)

那是不可能的。张量是tf.Operation的输出。来自documentation

  

Tensor是Operation的一个输出的符号句柄。它不保存该操作的输出值,而是提供在TensorFlow tf.Session中计算这些值的方法。

所以你不能独立改变它的价值。

答案 1 :(得分:1)

在您的示例中,feature_map没有值,因为它是一个操作。因此,你无法改变它的价值。您可以做的是在feed_dict的{​​{1}}参数中传递另一个值。

例如,如果你的feature_map后面跟着这样的操作:

session.run

然后您可以通过other_op = tf.gradient(feature_map, X) 更改传递给该操作(在这种情况下为gradient)的值,如下所示:

feed_dict