torch.autograd.backward中的参数问题
2017-12-30 19:53
281 查看
torch.autograd.backward(variables, grad_variables=None, retain_graph=None, create_graph=False)
给定图的叶子节点
此函数累积
参数:
我这里举一个官方的例子
输出结果是
out=14∑izi,zi=3(xi+2)2并且zi∣∣xi=1=27。接着∂out∂xi=32(xi+2),因此∂out∂xi∣∣xi=1=92=4.5
接着我们继续
输出结果是
这里这个
如果输出的多个
如有问题,希望大家指正,谢谢^_^!
给定图的叶子节点
variables, 计算图中变量的梯度和。 计算图可以通过链式法则求导。如果
variables中的任何一个
variable是 非标量(
non-scalar)的,且
requires_grad=True。那么此函数需要指定
grad_variables,它的长度应该和
variables的长度匹配,里面保存了相关
variable的梯度(对于不需要
gradient tensor的
variable,
None是可取的)。
此函数累积
leaf variables计算的梯度。你可能需要在调用此函数之前将
leaf variable的梯度置零。
参数:
variables(变量的序列) - 被求微分的叶子节点,即
ys。
grad_variables((张量,变量)的序列或无) - 对应
variable的梯度。仅当
variable不是标量且需要求梯度的时候使用。
retain_graph(
bool,可选) - 如果为
False,则用于释放计算
grad的图。请注意,在几乎所有情况下,没有必要将此选项设置为
True,通常可以以更有效的方式解决。默认值为
create_graph的值。
create_graph(
bool,可选) - 如果为
True,则将构造派生图,允许计算更高阶的派生产品。默认为
False。
我这里举一个官方的例子
import torch from torch.autograd import Variable x = Variable(torch.ones(2, 2), requires_grad=True) y = x + 2 z = y * y * 3 out = z.mean() out.backward()#这里是默认情况,相当于out.backward(torch.Tensor([1.0])) print(x.grad)
输出结果是
Variable containing: 4.5000 4.5000 4.5000 4.5000 [torch.FloatTensor of size 2x2]
out=14∑izi,zi=3(xi+2)2并且zi∣∣xi=1=27。接着∂out∂xi=32(xi+2),因此∂out∂xi∣∣xi=1=92=4.5
接着我们继续
x = torch.randn(3) x = Variable(x, requires_grad=True) y = x * 2 while y.data.norm() < 1000: y = y * 2 gradients = torch.FloatTensor([0.1, 1.0, 0.0001]) y.backward(gradients) print(x.grad)
输出结果是
Variable containing: 204.8000 2048.0000 0.2048 [torch.FloatTensor of size 3]
这里这个
gradients为什么要是
[0.1, 1.0, 0.0001]?
如果输出的多个
loss权重不同的话,例如有三个
loss,一个是
x loss,一个是
y loss,一个是
class loss。那么很明显的不可能所有
loss对结果影响程度都一样,他们之间应该有一个比例。那么比例这里指的就是
[0.1, 1.0, 0.0001],这个问题中的
loss对应的就是上面说的
y,那么这里的输出就很好理解了
dy/dx=0.1*dy1/dx+1.0*dy2/dx+0.0001*dy3/dx。
如有问题,希望大家指正,谢谢^_^!
相关文章推荐
- Torch 网络层 参数的初始化问题
- 在WEB编程中response.sendRedirect()传汉字参数乱码问题
- 【转】【第三方包】【Android Universal Imageloader】关于displayImage方法中URI参数的问题
- JAVA 通过 JNA 调用 C程序 dll 函数传入中文参数问题
- js中url中文参数乱码问题
- TableLayout 里的TextView等组的LayoutParams参数问题
- 传参数空值类型问题解决
- 日志及参数的乱码问题
- 通过URL传参数到后台出现乱码问题
- url 传参时包含&或者#号时当成参数解析的问题
- struts中文参数问题
- 表单提交取不到表单中参数的正确值的问题小计
- php中header跳转使用include包含解决参数丢失问题
- 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!
- MyBatis传入多个参数的问题
- python可变参数调用函数的问题
- 时间序列的算法ARMA算法的参数设定的问题
- c# 路径空格---ProcessStartInfo参数问题
- JavaWeb 解决超链接参数中文乱码问题
- 在线考试系统设计时必须考虑的问题之四---------综合参数设置问题