Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改TensorFlow中不是tf.变量的张量的值?_Python_Tensorflow_Neural Network_Deep Learning_Variable Assignment - Fatal编程技术网

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

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'

我知道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\u map
的值时,它不会影响其派生过程。 例如,
y=a^2
y'=2a
,我只需要将
a=1
更改为
a=2

Other\u op=tf.渐变(特征图,X)


不同的
功能映射将获得不同的值,但不会破坏操作的图形结构。

这是不可能的。张量是
tf.Operation
的输出。发件人:

张量是
操作
输出之一的符号句柄。它不保存该操作的输出值,而是提供一种在TensorFlow
tf.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
(in
y=a^2
)会发生变化。你为什么不想让那些人受到影响?我想你可能需要改变你的图表,就像交叉熵损失一样。我需要归一化损失值,它是张量。所以我想修改这个值,它也可以反向传播。现在可能开始有意义了。你可以举个例子。听起来你是在要求替换损失值,而实际上你可能更希望传入损失计算中使用的占位符/变量。(当你建议
tf.gradient
操作时,我没有像操作那样关注太多)其他人可能会有更好的想法。fed-in值会影响张量,但奇怪的是,这种变化不会影响导数的值。无论如何,谢谢你的讨论。