当前位置: 首页 > news >正文

深度学习(2)

1、神经网络的结构

(1)输入层:进行输入数据
(2)隐藏层:进行对数据根据权重和偏置与激活函数进行计算并传递给下个隐藏层(神经元)
(3)输出层:分为线性输出或者分类输出

2、神经网络的一些相关定义

前向传播:神经元中的信息逐层传递(输入层向着输出层传递),称之为前向传播

全连接:每个神经元都会与下一层的神经元进行连接一个不落


神经网络简图

Epoch:表示模型完整遍历一次整个训练数据集的过程。例如,训练10个Epoch表示模型将整个数据集反复学习10次

Batch Size:Batch Size是每次训练时输入的样本数量。例如,Batch Size=32 表示每次用32个样本计算一次梯度并更新模型参数。

Iteration:一次Iteration表示完成一个Batch数据的正向传播(预测)和反向传播(更新参数)的过程。

3、激活函数
(1)定义
激活函数时神经网络的桥梁,可以时线性的关系变成非线性的关系,所以激活函数必须是非线性函数,正是引入了激活函数所以神经网络才能学习复杂的非线性关系

(2)常用的激活函数

Sigmoid激活函数
sigmoid激活函数常用于二分类的输出层,放在隐藏层容易造成梯度消失的情况,因为sigmoid的导数在-6到6之间的趋近于零,且其倒数的最大值为0.25,如果多轮隐藏层进行反向传播时会使梯度越来越小,造成梯度消失。

Tanh激活函数

Tanh激活函数相对于sigmoid激活函数阈值更广在-1到1之间且关于原点中心对称,但是其导数比sigmoid收敛更快在-3到3之间接近为0,同样也有梯度消失的情况,常用于层数较少的神经网络,作为隐藏层的激活函数

Relu激活函数

Relu激活函数是目前用在隐藏层最常用的激活函数,函数简单,其倒导数为阶跃函数,不影响梯度的传递,不存梯度消失,且会只让部分神经元活跃有助于计算和提高模型效率,缺点为0点为不可导的点函数不光滑,但是后续有其他的相关函数变体进行弥补

Softmax激活函数
softmax激活函数常用于多分类任务的输出层激活函数,大部分情况会与交叉熵损失函数绑定使用,因为在进行反向传播时会减少计算资源,两个函数绑定一起求导简单

softmax函数的具体表达

4、神经网络模型简单构建与模型保存

import torch from torchsummary import summary import torch.nn as nn x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]).float() #使用Sequential定义模型 model = nn.Sequential( nn.Linear(3,4), nn.Tanh(), nn.Linear(4,4), nn.ReLU(), nn.Linear(4,2), nn.Softmax(dim=-1) ) #保存模型(全部保存) #torch.save(model,"model.pth") #保存状态字典 #torch.save(model.state_dict(),"model.pt") #加载模型 state_dict = torch.load(r"D:\deeplreanpy\deep\model.pt") model.load_state_dict(state_dict) #向前传播 y = model(x) print(y) #查看参数 summary(model,input_size=(3,),batch_size=10,device="cpu")

使用Sequential进行定义模型,在进行保存的时候一般报存模型的字典,使用模型时,要先定义模型且定义的模型必须和取模型字典的模型结构一致,model中的有魔法方法,再传入x时会自动调用forward方法也就是前向传播,可使用torchsummary.summary来查看模型结构与参数数量

5、损失函数

(1)均方误差损失函数:最常见的损失函数,对异常值敏感,遇到异常值时容易梯度爆炸,常用于回归任务

(2)绝对误差损失函数:对异常值不敏感,但是在0点处不可导

(3)二元交叉熵损失函数:常用于二分类的损失函数

(4)交叉熵损失函数:常用于多分类的损失函数

import torch import torch.nn as nn from torch.nn.functional import mse_loss #定义数据 #预测值神经网络的输出 out_put = torch.randn(5) #真实值 in_put = torch.randn(5) #平均绝对误差损失函数(线性函数的损失函数) l1_fun = nn.L1Loss() #计算损失 loss = l1_fun(in_put, out_put) print(loss) #均方误差(线性函数的损失函数) mse_loss1 = nn.MSELoss() mseloss = mse_loss1(out_put, in_put) print(mseloss) #平滑L1损失函数(平均绝对误差和均方误差的结合体) smooth_loss = nn.SmoothL1Loss() loss = smooth_loss(out_put, in_put) print(loss)
import torch import torch.nn as nn #二元交叉熵损失函数 #定义数据 out = torch.randn(5) sig = nn.Sigmoid() out2 = sig(out) print(out) #定义五个标签 zhenshi = torch.tensor([0,0,1,1,0]).float() #定义损失函数 bce_loss = nn.BCELoss() #计算损失 bce_loss2 = bce_loss(out2, zhenshi) print(bce_loss2) #二元交叉熵损失函数另一种写法 bce = nn.BCEWithLogitsLoss() bce2 = bce(out,zhenshi) print(bce2) #交叉熵损失函数 out3 = torch.randn(8,6) loss_fn = nn.CrossEntropyLoss() target2 = torch.tensor([1,0,2,4,5,0,1,3]) sc = loss_fn(out3,target2) print(sc)

6、梯度下降法

在神经网络中由于计算过于复杂,参数极多所以无法法直接用解析解进行求参数,所以使用梯度下降法进行求解,一般使用sgd梯度下降,也就是随机梯度下降,随机选取一批数据进行梯度下降

7、数据加载器

主要用于对数据进行处理,批量处理数据,对数据进行洗牌,还有抽取一批数据的功能

主要使用自定义加载器和tensor加载器

import torch import torch.nn as nn from torch.utils.data import Dataset, DataLoader #自定义数据集 class MyDataset(Dataset): #保存数据 def __init__(self,data): self.data = data #数据的长度 def __len__(self): return len(self.data) #提供索引 def __getitem__(self, index): return self.data[index] my_dataset = MyDataset([10,20,30,40,50]) print(my_dataset[0]) #内置的tensor数据集 from torch.utils.data import TensorDataset x = torch.randn(2,3) y = torch.tensor([1,10]) #构建tensor数据集 ds = TensorDataset(x,y) print(ds[0]) #数据加载器取一批次数据 #构建数据 x = torch.randn(10,3) y = torch.randn(10) ds = TensorDataset(x,y) #创建数据加载器 loader = DataLoader(ds, batch_size=2, shuffle=True,drop_last=False) #遍历加载器 for x,y in loader: print(x,y)

8、反向传播

反向传播是神经网络中最核心的算法,没有反向传播就没有神经网络兴起,正向传播,由于参数过多计算,每次迭代计算量级都非常大,而反向传播,每次迭代只需要一次正向一次反向就可以完成一次迭代,反向传播主要用到了链式求导法则,传播时将信号乘以节点的局部导数然后传递给下一个节点。

(1)加法节点的反向传播会将梯度,不做改变的传递给下个节点,乘法节点的反向传播,会将上游传来的值乘以输入的翻转向下游传递

例如sigmoid的倒数为y(1-y)通过sigmoid激活函数的梯度e就变成了Ey(1-y),也可以侧面看出梯度消失的原因、

权重部分的梯度会根据随机梯度下降法进行计算并更新本层的梯度,而x的梯度则是上一层的输出,将这个图复用给上一层x则变成了y再进行图里的步骤

http://www.jsqmd.com/news/794996/

相关文章:

  • ARM架构计数器-定时器寄存器原理与应用
  • 物理化学考研辅导班推荐:专门针对性培训机构评测 - michalwang
  • Excel与AI融合:用自然语言驱动数据处理自动化
  • 2026年五金模具定制市场现状分析:为什么工程公司都在寻找四快响应的佛山本地厂家 - 优质企业观察收录
  • 如何用ncmdumpGUI解锁网易云音乐NCM格式:完整图形化解决方案
  • 怎样快速批量下载微博相册:免费高效工具完整指南
  • 实战指南:智能微信好友检测工具高效使用全解析
  • 广东SMT治具厂家实力排行:技术与服务维度解析 - 奔跑123
  • 2026年保定短视频代运营与GEO优化深度指南|精准获客避坑手册 - 优质企业观察收录
  • 2026年必看!AI大模型API代理站深度剖析,诗云API(ShiyunApi)等优质推荐
  • 2026合肥劳力士回收实测,哪家出价顶?收的顶实力碾压 - 奢侈品回收测评
  • AI-Native Development已进入临界点:2025Q3全球头部科技公司生产环境采用率突破67.3%(附实测基准报告)
  • Windows Cleaner终极指南:如何彻底解决C盘空间不足问题
  • 00-WebGL 完整学习路线大纲
  • IDEA安装个人开发插件
  • WarcraftHelper 终极指南:让魔兽争霸3在现代电脑上完美运行
  • 猫抓浏览器扩展:5分钟掌握终极在线视频捕获神器
  • SQL示例:分别使用 MySQL 和 Oracle 创建表(自增主键、指定主键的区别,VARCHAR,VARCHAR2)
  • 微信数据解密终极指南:快速恢复你的珍贵聊天记录
  • 终极指南:3分钟用纯C语言工具解锁网易云NCM加密音乐
  • 3分钟告别激活烦恼:Windows和Office智能激活完全指南
  • 终极BepInEx 6.0.0插件框架:从崩溃根源到稳定运行的完整解决方案
  • Fate/Grand Automata:基于计算机视觉的FGO自动化战斗解决方案
  • 大润发购物卡回收:解决闲置痛点,解锁多重实在好处 - 米米收
  • Mac窗口置顶神器Topit:告别窗口遮挡,打造高效工作流
  • 教育康复学考研辅导班推荐:专门针对性培训机构评测 - michalwang
  • 静态动态文件
  • B站视频如何高效下载?这个工具让你轻松保存4K超清内容
  • 火山引擎OpenViking镜像:云原生开发的高效基础与安全实践
  • 避震不是“越硬越好”:拆解阻尼、弹簧与预载的黄金三角法则