pytorch深度学习笔记5-自动梯度求导
·
深度学习的核心数学原理是是自动微分框架以及链式求导法则,深入理解这两个部分的内容,对于深度学习掌握很重要。
(1)自动微分就是求解一个多元函数的导数。
(2)深度学习往往有比较多层,每一层都是一个函数,将不同层之间的输入链接起来需要链式求导。
(3)链式求导法则是微积分中复合函数求导的核心法则,其本质是将复合函数的导数分解为各层函数导数的乘积。

下面使用pytorch 创建一下张量的模型并尝试使用非pytorch的梯度求导方法与pytorch的接口进行比较。
import torch
#1.创建三个张量,并设置其需要梯度
x = torch.randn(1, 5, requires_grad=True)
y = torch.randn(5, 3, requires_grad=True)
z = torch.randn(3, 1, requires_grad=True)
print("x:\n", x, "\ny\n", y, "\nz\n", z)
#2.创建一个函数为g=xy
xy = torch.matmul(x, y)
print("xy\n", xy)
#3.创建一个函数为f=g.z
xyz = torch.matmul(xy, z)
#4.以上创建了一个计算图,
#5.创建反向传播形成梯度
xyz.backward()
print("xyz\n", xyz)
#6.输出pytorch梯度
print(x.grad, y.grad, z.grad)
# 7.根据数学求导直接计算梯度
# zx为f对y的偏导的梯度
zx = torch.matmul(z, x).permute(1, 0)
print("zx:",zx)
# zy为f对x的偏导的梯度
zy = torch.matmul(y, z).view(-1, 5)
print("zy:",zy)
数学推导如下,为ds推导过程




更多推荐
所有评论(0)