tensorflow - 计算权重的输出梯度
问题描述
从张量流模型开始,我希望能够检索输出相对于权重的梯度。反向传播旨在计算权重的损失梯度,为了在代码中的某处执行此操作,必须计算权重的输出梯度。
但我想知道如何在 API 级别获得这个雅可比行列式,有什么想法吗?
我知道我们可以访问磁带,但我不确定如何处理它,实际上我不需要整个雅可比行列式我只需要能够计算 J^{*} v 的矩阵向量积,其中 J ^{ } 是给定向量的 jacobian 和 va 的转置。
谢谢,问候。
解决方案
如果您只需要计算向量雅可比乘积,那么只这样做将比计算完整的雅可比要高效得多。计算 N 个变量的函数的 Jacobian 将花费 O(N) 时间,而向量-Jacobian 乘积需要 O(1) 时间。
那么如何在 TensorFlow 中计算向量雅可比积呢?诀窍是在函数中使用output_gradients
关键字 arg 。gradient
您将 的值设置为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.]
注意:如果您尝试在没有设置的情况下计算 tensorflow 中向量值(而不是标量)函数的梯度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
grad = g.gradient(y,x)
print(grad) # prints the vector-jacobian product with a vector of ones, [2.0,4.0]
推荐阅读
- matlab - 在 MATLAB 中查找函数的最小值和最大值
- php - 带有帖子的容器,使用 MySQL 和 PHP - 单击右箭头更改文章
- android - Android 应用程序在启动时关闭。给出错误'原因:仅执行(无读取)内存访问错误;可能是由于 .text' 中的数据
- java - 缺少 While 循环逻辑
- visual-studio-code - VS Code 仅显示 1 行可能的导入路径。如何将其转换回默认列表框?
- sql - 无法在 SQL Server 的现有列中分配默认约束
- performance - Chrome API 功能阻止渲染,直到应用所有更改
- mongodb - 如何触发猫鼬updateAt
- c# - 当我使用计时器时 UI 阻塞
- css - 如何自动调整primereact Datatable中的列