(深度学习快速入门)第三章第三节1:深度学习必备组件之数据集处理和参数初始化

news2024/11/24 14:22:22

文章目录

  • 一:数据集的处理
    • (1)数据集划分
    • (2)数据集验证
    • (3)标准化和归一化
  • 二:模型参数的初始化
    • (1)梯度消失和梯度爆炸
    • (2)模型参数初始化方法
      • ①:Xavier初始化
      • ②:Kaiming方法

从前文中可以看出,一个深度学习项目涉及“组件”非常多,例如损失函数、优化器、数据集处理等等,这些都需要我们去仔细研究,所以本节对这些深度学习中的重要组件进行详细叙述

一:数据集的处理

(1)数据集划分

数据集划分:对于一个数据集,我们一般会将其划分为如下三个部分

  • Train_set(训练集):占用70%,用于训练模型
  • Val_set(验证集):占用20%,用于验证模型性能,并以此调节参数、选择最佳模型
  • Test_set(测试集):占用10%,用于检验模型是否能够很好的预测输出,是否具有泛化能力

在这里插入图片描述

在划分数据集时注意

  • 这三个子集尽量保持同分布(随机)
  • 三个子集内的数据绝对不能重合,或者说污染
  • 在数据量较少,验证集和测试集可以合并为测试集,此时七三分即可

之所以需要验证集是因为

在这里插入图片描述

(2)数据集验证

因此,我们的模型不能通过测试集来评判,这样做反而会使模型过拟合测试数据,其参数只会针对测试数据有效,所以模型的验证应该要在验证集上。对于数据集的验证我们最常用的方法便是k-折交叉验证,它是指随机地将数据集切分为 k 个互不相交的大小相同的子集,然后将 k-1 个子集当成训练集训练模型,剩下的一个子集当测试集测试模型;将上一步对可能的 k 种选择重复进行 (每次挑一个不同的子集做测试集);这样就训练了 k 个模型,每个模型都在相应的测试集上计算测试误差,得到了 k 个测试误差,对这 k 次的测试误差取平均便得到一个交叉验证误差

如下图,k=3时就称之为3折交叉验证

在这里插入图片描述

(3)标准化和归一化

归一化(Standardization):将数据映射到[0, 1]或[-1, 1]之间,以此消除量纲

x i − m i n ( x i ) m a x ( x i ) − m i n ( x i ) \frac{x_{i}-min(x_{i})}{max(x_{i})-min(x_{i})} max(xi)min(xi)ximin(xi)

标准化(Normalization):将数据变换为均值为0,标准差为1的分布

x i − u σ \frac{x_{i}-u}{\sigma} σxiu

在这里插入图片描述

二:模型参数的初始化

(1)梯度消失和梯度爆炸

反向传播算法本质就是链式法则,而链式法则是一个连乘的形式,当层数越深的时候,梯度将以指数形式传播,所以梯度消失和梯度爆炸就是随着网络层数的增加,而最终使梯度值为接近0或非常大,继而无法继续训练的现象

梯度消失:sigmoid函数在早期是非常流行的,因为早期的人工神经网络受到生物神经网络的启发,神经元要么完全激活要么完全不激活(就像生物神经元)的想法很有吸引力。然而,它却是导致梯度消失问题的⼀个常见的原因。如下图当sigmoid函数输入过小或过大时梯度都会消失

import torch
from matplotlib import pyplot as plt

x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)
y = torch.sigmoid(x)
y.backward(torch.ones_like(x))
plt.figure(figsize=(12, 5))
plt.plot(x.detach(), y.detach())
plt.plot(x.detach(), x.grad.numpy())

在这里插入图片描述
梯度爆炸:梯度爆炸往往可能是由于不良初始化导致,没有机会让优化器收敛。如下图,生成100个高斯随机矩阵,并将它们与某个初始矩阵相乘,由于我们选择的尺度( σ 2 = 1 \sigma^{2}=1 σ2=1),导致矩阵乘积发生爆炸

M = torch.normal(0, 1, size=(4, 4))
print("初始矩阵\n", M)
for i in range(100):
    M = torch.mm(M, torch.normal(0, 1, size=(4, 4)))
print("百次相乘后\n", M)

在这里插入图片描述

(2)模型参数初始化方法

①:Xavier初始化

Xavier初始化:基本思想是为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等,Xavier初始化的实现就是下面的均匀分布

w ∼ U ( − a , a ) w\sim U(-a, a) wU(a,a)

其中 a = g a i n ∗ 6 f a n i n + f a n o u t a=gain * \sqrt{\frac{6}{fan_{in}+ fan_{out}} } a=gainfanin+fanout6 g a i n gain gain是指争议,可以通过不同的激活函数算出

②:Kaiming方法

Kaiming方法:ReLU激活函数属于非饱和类激活函数,并不会出现类似Sigmoid和tanh激活函数使用过程中可能存在的梯度消失或梯度爆炸问题,反而因为ReLU激活函数的不饱和特性,ReLU激活函数的叠加极有可能出现神经元活性消失的问题,很明显,该类问题无法通过Xavier初始化解决。目前通用的针对ReLU激活函数的初始化参数方法,是由何凯明所提出的HE初始化方法,也被称为Kaiming方法

w ∼ U ( − b o u n d , b o u n d ) w\sim U(-bound, bound) wU(bound,bound)

其中 b o u n d = g a i n ∗ 6 ( 1 + a 2 ) + f a n i n bound=gain * \sqrt{\frac{6}{(1+a^{2})+fanin}} bound=gain(1+a2)+fanin6 a a a是激活函数leaky_relu的负半轴斜率


from torch import nn
model = nn.Linear(in_features=16, out_features=128)
print("Xavier方法")
print(model.weight)
nn.init.xavier_uniform_(model.weight, gain=nn.init.calculate_gain('tanh'))
print(model.weight)
print("Kaiming方法")
nn.init.kaiming_uniform_(model.weight, a=1, mode='fan_in', nonlinearity='leaky_relu')
print(model.weight)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka概述

Kafka入门-1 视频资料,b站:https://www.bilibili.com/video/BV1eD4y1C7uM/?spm_id_from333.788.recommend_more_video.14&vd_source37596bc6f952081640b3f38ea9f6a2cb 深入理解 Kafka: 核心设计与实践原理。PDF 书资料: https://book.…

P8第一讲(选修):反向传播Backpropagation

8. 第 1 讲(选修):反向传播_哔哩哔哩_bilibili Gradient Descent neual work基本架构已经学过了 backpropagation(反向传播)可以帮助我们有效的进行渐变迭代计算(帮助计算梯度)。 假设网络有一大堆参数: 首先选一个初始的参数&…

零基础多图详解图神经网络(GNN/GCN)【论文精读】

原文链接: A Gentle Introduction to Graph Neural Networks (distill.pub) 我们不仅仅关系整个图的架构,其实我们更关心的是每个顶点每条边和整个图所表示的信息。 我们如何把我们想要的信息表示成以上这些向量,以及这些向量是否能够通过数据…

uni-app打开第三方地图软件进行导航

最近在开发字节小程序的过程中遇到地图导航的需求,相信大家也会遇到所以我为大家整理了一篇干货内容。 下面是我整理的代码案例---------记得喝水(太“干”了,复制就能用)。 效果图如下: 1.点击图标弹出弹框进行选择…

数据结构与算法基础——算法分析(1)

算法的定义 算法:对特定问题的求解方法和步骤的描述,在计算机中,他是指令的有限集合。 举例:求解一元二次方程的根 描述算法的基本方式: (1)自然语言 (2)流程图 &…

CSS3 弹性盒子(flex、flex-direction属性、flex-wrap属性、align-items属性、align-content属性)详解

文章目录flexflex-direction 属性flex-wrap 属性align-items 属性align-content 属性的使用flex 在 CSS3 中给 display 属性增加了新的属性值 flex,如果一个元素被设置 display:flex,说明该元素为弹性布局,也就是个弹性盒子。 flex 主要由两…

Linux traceroute 原理及使用

Linux traceroute 原理及使用 序 在某次接入数据的场景中,需要到对方 SFTP 服务器上,获取数据,但是在配置时发现在配置正确的情况下, 连接总是超时,最终排查后发现网络不通,打通网络后才正确连接&#xf…

【C++】函数重载

函数重载1.函数重载的背景2.函数重载的概念2.1参数类型不同的重载2.2参数个数不同的重载2.3参数类型顺序不同的重载2.4注意事项:仅仅是返回值不同无法构成函数重载3.C函数重载的原理---函数名字修饰4.函数重载总结1.函数重载的背景 在C语言中,我们写一个…

通信原理 | 基本概念

1 通信及通信系统 通信(Communication)是实现信息和消息传输的过程 通信系统(Communication System)的组成: 实现通信的所有硬件和软件设备、传输媒介以及各种通信协议等 消息(Message)、信息(Information)、信号(Signal)的区别: 消息通常指人的感官能够感受到的…

无刷电机高压与低压的选择与未来发展前景

近几年来,伴随无刷马达被戴森吸尘器全力以赴运用在家用电器上,颠覆了传统家电的3个产品运用场景,吹风筒就是这样的一个例子。 迅速风筒由于其加工工艺的创新能力,给大家增添了不一般的产品体验度。新型的迅速风筒,搭配…

2023我的前端面试小结

对事件委托的理解 (1)事件委托的概念 事件委托本质上是利用了浏览器事件冒泡的机制。因为事件在冒泡过程中会上传到父节点,父节点可以通过事件对象获取到目标节点,因此可以把子节点的监听函数定义在父节点上,由父节点…

Elasticsearch:利用搜索提高医疗保健公平 - 用多语言 NLP 模型和分析来改善最终用户体验

随着更高生产力和更健康的人群寿命更长,医疗保健将成为社会最重要的方面之一。 COVID-19 大流行加速了现代技术的采用,并凸显了患者体验的重要性。 随着越来越多的消费者开始控制他们的数据,医疗保健系统变得捉襟见肘。 根据德勤和斯科茨代尔…

【High 翻天】Higer-order Networks with Battiston Federico (5)

目录扩散高阶扩散题外话高阶随机游走扩散 在给出建模之后,接下来讨论如何将传统意义下的扩散拓展到高阶系统。扩散是一个线性过程,但在许多不同的情况下都有强相关性。扩散这个词实际可指代两个不同的过程: 标准的扩散过程,或者…

课题-基于安卓androidstudio的校园外卖app

一、课题介绍 客户端: 1:登录注册:用户可以通过自己的信息进行账号的注册 2:商家搜索:可以对商家的信息进行模糊搜索 3:查看菜单:点击商家可以查看具体的菜单信息 4:添加购物车&…

SAP FICO 财务月结--自动清账

一、基本概念 清账是会计科目的借贷挂账后的核销,其中包括客户、供应商以及实行未清账管理的总账科目等。 客户和供应商的清账通常会在收款或者付款的时候同时完成,也就是边收边清或者边付边清,也可以后续手工清账(客户F-32&…

人脸清晰化神器codeFormer图形界面包GUI

1. codeFormer介绍 在NeurIPS 2022上,南洋理工大学-商汤科技联合研究中心S-Lab提出了一种基于VQGANTransformer的人脸复原模型CodeFormer,效果是真的强大,先展示下效果,用的官方案例效果图。 官方给出的代码见这里 传送门 2. 图…

Python数组存储方式与向量化、按行按列展平/展开

文章目录1 逻辑存储与内存存储1.1 高维张量1.2 按行展开和按列展开2 矩阵向量化、按行按列展开2.1 numpy中:numpy.ravel()ndarray.flatten()2.2 Pytorch中:3 pytoch中的view,reshape,permute对比3.1 view3.2 reshape3.3 permute链…

Redis缓存雪崩缓存击穿缓存穿透

Redis缓存雪崩&缓存击穿&缓存穿透一 缓存更新策略二 缓存雪崩三 缓存击穿四 缓存穿透一 缓存更新策略 目前redis缓存更新存在3种主流策略,分别是:内存淘汰、超时剔除、主动更新。 1、内存淘汰 LRU/LFU/FIFO算法剔除:例如maxmemory-…

【云原生进阶之容器】第二章Controller Manager原理2.4节--Informer机制剖析

1 Informer机制剖析 如上图所示,client-go 包中一个非常核心的工具就是 informer,informer 可以让与 kube-apiserver 的交互更加优雅。 Informer的主要作用包括如下两个方面: 同步数据到本地缓存。Informer 会不断读取 Delta FIFO 队列中的 Object,在触发事件回调之…

MySQL8.0锁情况排查

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者: 杨延昭文章来源:GreatSQL社区投稿 在数据库中,除传统的计算资源(CPU、RAM、IO)的争用…