深度学习 (自动求导)

介绍:

深度学习是一种机器学习方法,其使用神经网络模型来进行学习和预测。自动求导是深度学习中的一项重要技术,用于计算神经网络中各个参数对损失函数的偏导数。

在深度学习中,我们通常使用一个损失函数来衡量模型的预测结果与真实值之间的差异。然后,我们通过调整神经网络中的参数,以最小化损失函数,从而改善模型的预测能力。

自动求导是指计算某个函数的导数时,由计算机自动完成的过程。在深度学习中,我们需要计算损失函数对网络参数的偏导数,以便进行参数更新。由于神经网络的结构复杂且参数众多,手动计算这些偏导数是非常困难和耗时的。自动求导的引入,使得我们可以方便地计算损失函数对参数的偏导数。

在深度学习框架中,例如PyTorch或TensorFlow,自动求导功能已经内置在其中。一旦我们定义了损失函数和网络模型,然后通过反向传播算法,自动求导将会自动计算损失函数对网络参数的偏导数。在实际的训练过程中,我们只需要调用优化算法,并将这些偏导数作为梯度传递给优化算法,以更新网络参数。

总结来说,深度学习中的自动求导是一种方便快捷地计算损失函数对网络参数的偏导数的技术,它使得我们可以更加高效地训练神经网络模型。

import torch

x= torch.arange(4.0)

x.requires_grad_(True) #等价于 需要把梯度存储

x.grad#存储的梯度在这(x关于y的导数),默认值为None

y=2*torch.dot(x,x)#dot 累积 y=2*x^2


y.backward()#调用反向传播函数自动计算y关于x每个分量的梯度
x.grad#打印梯度
'''tensor([ 0.,  4.,  8., 12.]) '''

x.grad==4*x
'''tensor([True, True, True, True])'''

## 计算另一个函数
x.grad.zero_()#需要清零,不然会累积梯度
y = x.sum()#求x和的函数
print('y:', y)
y.backward()
print('x.grad:', x.grad)#梯度都应该为1
'''
y: tensor(6., grad_fn=<SumBackward0>)
x.grad: tensor([1., 1., 1., 1.])
'''

 非标量变量的反向传播:

# 非标量变量的反向传播
x.grad.zero_()
print('x:', x)
y = x * x#矩阵相乘
y.sum().backward()
print('x.grad:', x.grad)

'''
x: tensor([0., 1., 2., 3.], requires_grad=True)
x.grad: tensor([0., 2., 4., 6.])
'''

分离计算:

#分离计算
x.grad.zero_()
y=x*x# y关于x的函数
u = y.detach()#将y转化为标量
z = u*x#z就等于 标量 乘 x ,它的梯度应该就为u
z.sum().backward()
x.grad==u

'''
tensor([True, True, True, True])
'''

x.grad.zero_()
y.sum().backward()
x.grad==2*x#意味着y还是关于x的函数,但是u不是
'''
tensor([True, True, True, True])
'''

python控制流的梯度计算:

#python控制流的梯度计算
def f(a):
    b = a * 2
    print(b.norm())
    while b.norm() < 1000:  # 求L2范数:元素平方和的平方根
        b = b * 2
    if b.sum() > 0:
        c = b
    else:
        c = 100 * b
    return c


print('2.Python控制流的梯度计算')
a = torch.tensor(2.0)  # 初始化变量
a.requires_grad_(True)  # 1.将梯度赋给想要对其求偏导数的变量
print('a:', a)
d = f(a)  # 2.记录目标函数
print('d:', d)
d.backward()  # 3.执行目标函数的反向传播函数
print('a.grad:', a.grad)  # 4.获取梯度

'''
2.Python控制流的梯度计算
a: tensor(2., requires_grad=True)
tensor(4., grad_fn=<CopyBackwards>)
d: tensor(1024., grad_fn=<MulBackward0>)
a.grad: tensor(512.)
'''

相关推荐

  1. 深度学习自动

    2024-03-24 10:30:03       41 阅读
  2. 【pytorch】自动机制

    2024-03-24 10:30:03       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 10:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 10:30:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 10:30:03       82 阅读
  4. Python语言-面向对象

    2024-03-24 10:30:03       91 阅读

热门阅读

  1. 大模型产品整理

    2024-03-24 10:30:03       41 阅读
  2. 机器学习概念、步骤、分类和实践

    2024-03-24 10:30:03       37 阅读
  3. 【NC229005】同余方程

    2024-03-24 10:30:03       39 阅读
  4. 协同过滤前置条件

    2024-03-24 10:30:03       35 阅读
  5. 蓝桥集训之星空之夜

    2024-03-24 10:30:03       40 阅读
  6. 【Docker】常用命令 docker network inspect

    2024-03-24 10:30:03       39 阅读
  7. 什么是VSYNC信号

    2024-03-24 10:30:03       38 阅读
  8. Android 观察者模式

    2024-03-24 10:30:03       43 阅读
  9. LeetCode 2657.找到两个数组的前缀公共数组

    2024-03-24 10:30:03       44 阅读