如何在TensorFlow变量上获得损耗的梯度?
tensorflow
8
0

我所追求的功能是能够根据给定的数据判断给定变量相对于误差函数的梯度。

一种方法是查看调用训练后变量的变化量,但是显然,根据学习算法,变量会发生很大变化(例如,几乎不可能用RProp这样的变量来分辨),而仅仅是不是很干净。

提前致谢。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

使用tf.gradients()函数,您可以计算一个张量相对于一个或多个其他张量(包括变量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: ...})
收藏
评论

在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
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号