ptorch 求导

如果输出是一个标量的话,就是对输入Variable的每一个元素求偏导,所以直接使用out.backward()不加参数,然后在输入的Variable里面使用.grad方法,就返回一个和输入的Variable大小一样的Tensor,里面装着out对于每一个元素求偏导数的数值

相当于把输入Variable的每一个元素看成变量,这就是一个多变量的函数,求偏导需要对每一个变量求,有多少个变量就有多少个导数,所以求导的形状和输入一样

如下:

import torch
from torch.autograd import Variable
a=Variable(torch.Tensor([2,3]),requires_grad=True)
b=a+3
c=b*3
out=c.mean()
out.backward()
print("a.data")
print(a.data)
print("b.data")
print(b.data)
print("c.data")
print(c.data)

print("out.data")
print(out.data)
print(out.data.item())

输出:
ptorch 求导_第1张图片

而对于输出是一个矩阵,导数是矩阵中每一个元素对输入中的求导的和,比如 输入是x,里面有四个元素,输出是y,也有四个元素
y对于x的倒数就是y中的每一个元素对于x的导数的和
如下:

import torch
from torch.autograd import Variable as V
x = torch.Tensor([[1,2],[3,4]])
x=V(x,requires_grad=True)
y=V(torch.zeros(2,2))
y[0,0]=4*x[0,0]+3*x[0,1]
y[0,1]=3*x[0,1]
y[1,0]=3*x[1,0]+10*x[0,1]
y[1,1]=x[1,1]
y.backward(torch.ones(2,2))
print(y,x.grad)

输出:
在这里插入图片描述

你可能感兴趣的:(ptorch 求导)