计算输出权重的梯度



从张量流模型开始,我希望能够检索输出相对于权重的梯度。反向传播旨在计算权重损失的梯度,为了在代码中的某个地方做到这一点,必须计算权重的输出梯度。

但是我想知道如何在API级别获得这个雅各比安,有什么想法吗?

我知道我们可以访问磁带,但我不确定如何处理它,实际上我不需要整个雅可比矩阵,我只需要能够计算 J^{*}v 的矩阵向量积,其中 J^{}是雅可比矩阵的转置和 v 一个给定的向量。

谢谢 问候。

如果你只需要计算向量雅可比乘积,只这样做会比计算完整的雅可比乘积更有效。计算 N 个变量函数的雅可比量将花费 O(N( 时间,而不是向量雅可比乘积的 O(1( 时间。

那么如何在TensorFlow中计算向量雅可比积呢?诀窍是在gradient函数中使用output_gradients关键字 arg。将output_gradients的值设置为向量-雅可比积中的向量。让我们看一个例子。

import tensorflow as tf
with tf.GradientTape() as g:  
x  = tf.constant([1.0, 2.0])  
g.watch(x)  
y = x*x # y is a length 2 vector
vec = tf.constant([2.0,3.0]) # vector in vector jacobian product
grad = g.gradient(y,x,output_gradients = vec)
print(grad) # prints the vector-jacobian product, [4.,12.]

注意:如果您尝试在不设置output_gradients的情况下计算张量流中向量值(而不是标量(函数的梯度,它将计算向量雅可比乘积,其中向量设置为全 1。例如

import tensorflow as tf
with tf.GradientTape() as g:  
x  = tf.constant([1.0, 2.0])  
g.watch(x)  
y = x*x # y is a length 2 vector
grad = g.gradient(y,x)
print(grad) # prints the vector-jacobian product with a vector of ones, [2.0,4.0]

相关内容

  • 没有找到相关文章

最新更新