Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
如何得到TensorFlow变量的损失梯度?_Tensorflow - Fatal编程技术网

如何得到TensorFlow变量的损失梯度?

如何得到TensorFlow变量的损失梯度?,tensorflow,Tensorflow,我所追求的功能是能够告诉给定变量相对于给定数据的误差函数的梯度 实现这一点的一种方法是查看调用train后变量发生了多大的变化,但很明显,这可能会根据学习算法发生很大的变化(例如,使用RProp之类的工具几乎无法判断),而且不是很清晰 提前感谢。该函数允许您计算一个张量相对于一个或多个其他张量(包括变量)的符号梯度。考虑下面的简单例子: data = tf.placeholder(tf.float32) var = tf.Variable(...) # Must be

我所追求的功能是能够告诉给定变量相对于给定数据的误差函数的梯度

实现这一点的一种方法是查看调用train后变量发生了多大的变化,但很明显,这可能会根据学习算法发生很大的变化(例如,使用RProp之类的工具几乎无法判断),而且不是很清晰

提前感谢。

该函数允许您计算一个张量相对于一个或多个其他张量(包括变量)的符号梯度。考虑下面的简单例子:

data = tf.placeholder(tf.float32)
var = tf.Variable(...)              # Must be a tf.float32 or tf.float64 variable.
loss = some_function_of(var, data)  # some_function_of() returns a `Tensor`.

var_grad = tf.gradients(loss, [var])[0]
然后,可以使用此符号渐变来计算某些特定点(数据)中的渐变:


在TensorFlow 2.0中,您可以使用来实现这一点
GradientTape
记录在该上下文中发生的任何计算的梯度。下面是一个示例,说明了您可以如何做到这一点

将tensorflow导入为tf
#这是神经网络的权值作为tf.Variable
x=tf.变量(3.0)
#在的上下文中执行的TensorFlow操作
#记录一段梯度带以进行区分
使用tf.GradientTape()作为磁带:
#在梯度带的上下文中进行计算
#例如计算损耗
y=x**2
#求网络权值的梯度w.r.t.损失
dy_dx=磁带梯度(y,x)
打印(dy_dx)#返回6

如果要将渐变与内置的训练算法(如
GradientDescentOptimizer
AdagradOptimizer
)结合使用,该怎么办?我希望避免计算网络的梯度两次。
tf.train.GradientDescentOptimizer
类(以及相关的
优化器
类)在内部调用
tf.gradients()
。如果要访问为优化器计算的梯度,可以调用
优化器.compute\u gradients()
优化器。手动应用\u gradients()
,而不是调用
优化器.minimize()
@mrry:只是为了澄清一下,
symbolic
这里的梯度只是一个未计算的张量,而不是实际的符号梯度,即symgrad(x^2)=2*x。有没有办法不用看张力板就能做到这一点?如果我想在训练过程中看到梯度,这也行吗?你说的是数值导数,这让我感到不安,因为这不是我想要的或效率低下。@Pinocchio:我认为数值导数只是指在给定点上计算的导数。如果我想在训练过程中查看/检查梯度,你的问题的解是否也有效?是否需要是a
变量
假设您没有在此处显式地对其进行变异?
sess = tf.Session()

var_grad_val = sess.run(var_grad, feed_dict={data: ...})