深度学习 (自动求导)

2024-03-24 05:44
文章标签 学习 深度 自动 求导

本文主要是介绍深度学习 (自动求导),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍:

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

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

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

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

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

import torchx= torch.arange(4.0)x.requires_grad_(True) #等价于 需要把梯度存储x.grad#存储的梯度在这(x关于y的导数),默认值为Noney=2*torch.dot(x,x)#dot 累积 y=2*x^2y.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 * 2print(b.norm())while b.norm() < 1000:  # 求L2范数:元素平方和的平方根b = b * 2if b.sum() > 0:c = belse:c = 100 * breturn cprint('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.)
'''

这篇关于深度学习 (自动求导)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840606

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;