如何在TensorFlow变量中获得损失的梯度?

时间:2016-02-05 14:21:25

标签: tensorflow

我之后的功能是能够在给定一些数据的情况下判断给定变量的梯度与我的误差函数有关。

执行此操作的一种方法是查看在调用训练后变量的变化量,但显然可以根据学习算法大量变化(例如,几乎不可能用RProp之类的东西来判断)并且不是很干净。

提前致谢。

2 个答案:

答案 0 :(得分:51)

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

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]

然后,您可以使用此符号渐变来评估某个特定点(数据)中的渐变:

sess = tf.Session()

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

答案 1 :(得分:7)

在TensorFlow 2.0中,您可以使用GradientTape来实现。 GradientTape记录在上下文中发生的任何计算的梯度。下面是如何执行此操作的示例。

import tensorflow as tf

# Here goes the neural network weights as tf.Variable
x = tf.Variable(3.0)

with tf.GradientTape() as tape:
  # Doing the computation in the context of the gradient tape
  # For example computing loss
  y = x**2 

# Getting the gradient of weight w.r.t loss 
dy_dx = tape.gradient(y, x) 
print(dy_dx) # Returns 6