tensorflow - 如何使用自微分特征计算向量相对于向量的导数
问题描述
我正在使用张量流。问题是:
我有一个向量 x = (x_0, x_1) 和一个地图:y = [x_0+x_1, x_0-x_1]。
我想使用张量流的自动微分功能来计算 dy/dx 的导数。我怎样才能实现它?
我在张量流教程上搜索,它只给了我一个例子来计算以下问题的梯度:
y = x_0^2 + x_1^2。
没有示例说明如何计算向量对向量的导数。
解决方案
的文档tf.gradients
说:
tf.gradients(
ys,
xs,
...
)
ys: A Tensor or list of tensors to be differentiated.
xs: A Tensor or list of tensors to be used for differentiation.
类似于以下您想要做的事情:
x = tf.get_variable("x",
[2, 5],
initializer=tf.truncated_normal_initializer(stddev=0.02))
x_0 = x[0]
x_1 = x[1]
y_0 = x_0 + x_1
y_1 = x_0 - 2*x_1
y = tf.concat([[y_0], [y_1]], axis=0)
grad = tf.gradients(ys=y, xs=[x_0, x_1], unconnected_gradients='zero')
with tf.Session() as s:
s.run(tf.initialize_all_variables())
x0, x1, x, y, grad = s.run([x_0, x_1, x, y, grad])
print 'x0=\n', x0, '\nx1=\n', x1
print 'x=\n', x
print 'y=\n', y
print 'grad=\n', grad
结果:
x0=
[-0.02764007 0.01410516 0.02441488 0.02322472 0.03130293]
x1=
[-0.00922771 0.0021055 -0.00121181 0.00638576 0.01953333]
x=
[[-0.02764007 0.01410516 0.02441488 0.02322472 0.03130293]
[-0.00922771 0.0021055 -0.00121181 0.00638576 0.01953333]]
y=
[[-0.03686778 0.01621066 0.02320307 0.02961049 0.05083626]
[-0.00918464 0.00989417 0.0268385 0.0104532 -0.00776374]]
grad=
[array([ 2., 2., 2., 2., 2.], dtype=float32),
array([-1., -1., -1., -1., -1.], dtype=float32)]
推荐阅读
- jenkins - Jenkins+AWSLoadBalancerController 示例
- python - Cassandra cqlengine python驱动程序中的聚合查询
- php - 我如何从访问 php 的最后一页获取 url?
- node.js - Angular - 分配失败清除可能不会成功
- vpn - pfSense 2.5.0 升级破坏了我的 NordVPN 网关
- javascript - 如何让 discord bot 等待回复 5 分钟然后发送消息?使用不和谐的 js
- powershell - 解析 REST API 输出
- nsis - 在 NSIS 中,如何检测 Win 10 和 Windows 19 的 Windows 版本
- python - 对于这个问题,我使用什么函数来查找字典中的特定键?什么是默认返回值?
- mysql - SQL 数据库中的关联值