python - 计算张量流梯度
问题描述
我对tensorflow 梯度文档中用于计算梯度的示例感到困惑。
a = tf.constant(0.)
b = 2 * a
g = tf.gradients(a + b, [a, b])
with tf.Session() as sess:
print(sess.run(g))
这使[3.0, 1.0]
我觉得我真的错过了一些明显的东西,但如果a
本质上是0
那么b
,因此a+b =0
。那么关于 a 和 b 的微分零如何给你类似的东西[3.0, 1.0]
。
我相信我在这里误解了张量流结构/语法。
解决方案
为了比较,考虑一个实变量的实值函数f : R → R,由f ( x ) = 10 x给出。这里,f '( x ) = 10,不管x的值如何,所以特别是f '(0) = 10。
类似地,正如教程中所解释的那样,根据定义,( a , b ) ↦ a + b对于b ( a ) = 2 a的总导数是 (3, 1),它与a无关。
举一个不那么简单的例子,让我们考虑
a = tf.constant(5.)
b = 2 * a
g = tf.gradients(a**3 + 2*b**2, [a, b])
with tf.Session() as sess:
print(sess.run(g))
这里,关于a的全导数是a ↦ a ³ + 2(2 a )² = a ³ + 8 a ² 的导数,它变成a ↦ 3 a ² + 16 a,而关于b的导数是a ↦ 4 b ( a ) = 8 a。因此,在a = 5 时,我们期望结果为 (3 · 5² + 16 · 5, 8 · 5) = (155, 40),并且运行代码正是你得到的。
推荐阅读
- java - Android 过滤“mp3”文件
- databricks - 从 Python 中的 Databricks Filestore 下载 CSV 文件不起作用
- c# - 强制转换为 C# 中的两种类型之一
- python - 控制台关闭时的python执行函数
- ssl - Openssl:我在 1.0.2 和 1.1.1 中使用相同的 TLS 和 CipherSuite,但它们的行为不同
- python - 如何获取表格的 TFIDF
- java - 当涉及类型参数时,为什么 Java 无法找出一些明显的非法转换?
- python - TypeError: 'int' object is not callable - 在一种情况下接受为列表,但在另一种情况下接受为 int
- python-3.x - 如何在 GET 请求中返回 json 响应?
- kubernetes - 不允许 Gitlab 部署到 Kubernetes 命名空间