Python 如何更改TensorFlow中不是tf.变量的张量的值?
我知道TensorFlow中有一个Python 如何更改TensorFlow中不是tf.变量的张量的值?,python,tensorflow,neural-network,deep-learning,variable-assignment,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'
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\u map
的值时,它不会影响其派生过程。
例如,y=a^2
,y'=2a
,我只需要将a=1
更改为a=2
Other\u op=tf.渐变(特征图,X)
不同的功能映射将获得不同的值,但不会破坏操作的图形结构。这是不可能的。张量是tf.Operation
的输出。发件人:
张量是操作
输出之一的符号句柄。它不保存该操作的输出值,而是提供一种在TensorFlowtf.Session
中计算这些值的方法
因此,您不能单独更改其值。在您的示例中,功能图
没有值,因为它是一个操作。因此,您不能更改它的值。您可以做的是将另一个值作为session.run的feed\u dict
参数的一部分传入
因此,例如,如果您的要素图后面跟着这样的操作:
other_op = tf.gradient(feature_map, X)
然后,您可以通过feed\u dict
更改传入该op的值(gradient,在本例中为gradient
),如下所示:
session.run(other_op, feed_dict={feature_map: <new value>})
session.run(其他_op,feed_dict={feature_map:})
感谢您的快速回复!是否可以更清楚地了解如何使用feed\u dict
方法传递另一个值。新值会影响其派生吗?就像tf.gradient(feature\u map,X)
是的,我添加了一个例子,但是使用feed\u dict
传递值,feature\u map
需要是tf.placeholder
。它不会传播。遗憾的是,尝试这种方法是没有用的。必须通过feed\u dict
输入tf.placeholder
。但是其他的张量也可以用这种方式输入。是的!你是对的!但在本例中,我发现session.run(other_-op,feed_-dict={X:image,feature_-map:})
和session.run(other_-op,feed_-dict={X:image,feature_-map:})具有相同的值。我就是这么说的,没用谢谢你的指示。有没有其他方法可以实现我描述的结果?您可以运行后续的ops并传递您自己的功能\u map
值。所以其他运营商会认为功能图
具有该值。但它不会通过特性图传播。如果这足够了,请尝试sess.run(…,feed\u dict={feature\u map:…})
也许我真的需要考虑其他方法。我想更改op的值,但不影响其图形,直到不太清楚为止。也许对其他人来说是这样。更改输入值将影响将其用作输入的张量。因此,如果输入a
,我希望y
(iny=a^2
)会发生变化。你为什么不想让那些人受到影响?我想你可能需要改变你的图表,就像交叉熵损失一样。我需要归一化损失值,它是张量。所以我想修改这个值,它也可以反向传播。现在可能开始有意义了。你可以举个例子。听起来你是在要求替换损失值,而实际上你可能更希望传入损失计算中使用的占位符/变量。(当你建议tf.gradient
操作时,我没有像操作那样关注太多)其他人可能会有更好的想法。fed-in值会影响张量,但奇怪的是,这种变化不会影响导数的值。无论如何,谢谢你的讨论。