【发布时间】:2018-01-09 13:57:16
【问题描述】:
我知道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会得到不同的值,但不会破坏操作的图结构。
【问题讨论】:
-
还是不太清楚。也许是对别人。更改馈入值将影响使用该值作为输入的张量。因此,如果输入
a,我希望y(在y = a^2中)会发生变化。您为什么不希望这些受到影响?我认为您可能需要更改图表。 -
就像一个交叉熵损失。我需要标准化损失值,它是一个张量。所以我想修改值,它也可以反向传播。
-
现在可能开始有意义了。你可以提供一个例子。听起来您要求替换损失值,而实际上您最好允许传入损失计算中使用的占位符/变量。(当您建议
tf.gradient时,我没有太注意作为操作)其他人可能有更好的想法。 -
输入的值可以影响张量,但奇怪的是这种变化不影响导数的值。无论如何,感谢您与您讨论。
标签: python tensorflow neural-network deep-learning variable-assignment