常用的深度学习优化方式
全连接层
PyTorch中的全连接层(Fully Connected Layer)也被称为线性层(Linear Layer),是神经网络中最常用的一种层。全连接层将输入数据的每个元素与该层中的每个神经元相连接,输出结果是输入数据与该层的权重矩阵相乘,并加上该层的偏置向量。
假设我们有一个输入向量x,它的维度是n,全连接层有m个神经元,那么全连接层的输出可以表示为:
y = Wx + b
其中W是一个m×n的权重矩阵,b是一个长度为m的偏置向量。通常情况下,权重矩阵和偏置向量都是需要学习的参数,即神经网络在训练过程中会不断调整它们的值以使得网络的输出更接近真实值。
全连接层的作用是将输入数据进行线性变换,并将其映射到一个新的空间中,从而得到更高层次的特征表示。在深度学习中,通常会将多个全连接层组合起来构成一个神经网络。这些全连接层可以在输入和输出之间插入非线性的激活函数,例如ReLU、sigmoid等,从而使得神经网络可以拟合非线性的函数关系。
在PyTorch中,我们可以使用nn.Linear类来创建全连接层。例如,下面的代码创建了一个输入维度为784,输出维度为256的全连接层:
import torch.nn as nnfc = nn.Linear(784, 256)
创建全连接层后,我们可以将数据传递给它,并通过调用forward方法计算输出。例如,假设我们有一个输入张量x,维度为(batch_size, 784),我们可以将它传递给全连接层并计算输出:
output = fc(x)
这将返回一个形状为(batch_size, 256)的输出张量。
总之,全连接层是神经网络中最基本的一种层,它可以将输入数据进行线性变换并将其映射到一个新的空间中。在深度学习中,我们通常将多个全连接层组合起来构成一个神经网络,从而得到更高层次的特征表示。在PyTorch中,我们可以使用nn.Linear类来创建全连接层,并将数据传递给它进行计算。
交叉熵
PyTorch中的交叉熵是一个常用的损失函数,通常用于多分类任务。在深度学习中,我们的目标是使模型能够尽可能地正确地预测输入数据的标签或类别。交叉熵损失函数通过测量预测的类别分布与实际类别分布之间的距离来评估模型的性能。
在PyTorch中,交叉熵可以通过以下方式定义:
loss = nn.CrossEntropyLoss()
其中nn是PyTorch中的一个模块,包含了许多神经网络的工具。CrossEntropyLoss()是其中的一个类,用于计算交叉熵损失。通常情况下,我们在训练过程中使用这个类来计算损失。
假设我们有一个大小为N的批次(batch)的样本,每个样本有C个类别,我们将样本的标签表示为一个大小为N的一维张量y,每个元素的值为0到C-1之间的整数。同时,我们有一个大小为N x C的二维张量y_pred,每一行表示一个样本的预测概率分布。也就是说,对于第i个样本,它属于第j个类别的概率为y_pred[i][j]。这个概率分布可以通过模型的输出层获得。
使用PyTorch中的交叉熵损失函数可以这样计算:
loss = nn.CrossEntropyLoss()
output = model(input)
loss_value = loss(output, target)
其中,input是模型的输入数据,output是模型的输出数据,target是样本的标签。loss_value是损失函数的值,用于反向传播和更新模型的参数。
正则化(Regularization)
正则化(Regularization)是机器学习中一种用于避免过拟合的技术。在训练机器学习模型时,我们通常会将数据集分成训练集和验证集,通过训练集来训练模型,然后通过验证集来评估模型的性能。然而,在训练过程中,模型可能会过度拟合训练数据,这意味着模型在训练集上表现良好,但在验证集上表现不佳。过拟合可能是由于模型过于复杂,而无法从数据中学习到通用模式所致。
为了避免过拟合,正则化技术会对模型的复杂度进行惩罚,以鼓励模型学习到通用模式,而不是仅适应训练数据。常见的正则化技术包括L1正则化和L2正则化。L1正则化通过对模型的权重向量进行惩罚,鼓励模型使用较少的特征。L2正则化通过对模型的权重向量的平方进行惩罚,鼓励模型使用所有的特征,但使权重向量中的值不会过大。
正则化技术可以帮助提高模型的泛化能力,从而在未见过的数据上表现更好
动量与学习率衰减
动量(Momentum)是一种在梯度下降中使用的优化方法,它有助于加速收敛和减少震荡。动量方法在每次迭代时都会考虑之前迭代的梯度,将当前梯度与之前的梯度进行加权平均。通过引入动量,模型在更新参数时会更加平滑,减少了噪声对模型的影响,从而能够更快地达到最优解。
学习率衰减(Learning Rate Decay)是指在训练过程中逐渐降低学习率的方法。随着训练的进行,学习率衰减可以帮助模型更加细致地调整参数,从而达到更好的效果。学习率衰减可以有不同的方式实现,比如按照固定的步长进行衰减,或者根据训练过程中的性能表现动态地调整衰减的程度。
综合来说,动量和学习率衰减都是优化神经网络训练的方法,它们可以帮助模型更快地收敛、减少震荡、避免局部最优解等问题,从而提高模型的泛化能力和性能。
相关文章:
常用的深度学习优化方式
全连接层 PyTorch中的全连接层(Fully Connected Layer)也被称为线性层(Linear Layer),是神经网络中最常用的一种层。全连接层将输入数据的每个元素与该层中的每个神经元相连接,输出结果是输入数据与该层的…...
全面吃透Java Stream流操作,让代码更加的优雅
文章目录1 认识Stream流1.1 什么是流1.2 流与集合1.2.1 流只能遍历一次1.2.2 外部迭代和内部迭代1.3 流操作1.3.1 中间操作1.3.2 终端操作1.3.3 使用流2 学会使用Stream流2.1 筛选和切片2.1.1 用谓词筛选2.1.2 筛选各异的元素2.1.3 截短流2.1.4 跳过元素2.2 映射2.2.1 map方法2…...
机器学习学习记录1:假设空间
我们可以把学习过程看作一个在所有假设组成的空间中进行搜索的过程,搜索目标是找到与训练集"匹配" 的假设,即能够将训练集中的瓜判断正确的假设.假设的表示一旦确定,假设空间及其规模大小就确定了.对于西瓜问题,这里我们…...
开源工具系列5:DependencyCheck
Dependency-Check 是 OWASP(Open Web Application Security Project)的一个实用开源程序,用于识别项目依赖项并检查是否存在任何已知的,公开披露的漏洞。 DependencyCheck 是什么 Dependency-Check 是 OWASP(Open Web …...
JDBC知识点全面总结2:JDBC实战编写CRUD
二.JDBC知识点全面总结1:JDBC实战编写CRUD 1.JDBC重要接口? 2.Driver和DriverMangement的关系? 3.JAVA与数据库连接 4.JAVA中使用statement来执行sql语句时,拼接字符串的sql注入问题? 5.使用preparedstatement进行…...
java - 数据结构,算法,排序
一、概念 1.1、排序 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 平时的上下文中,如果提到排序,通常指的是排升序(非降序)。 通常意义上的排序&#…...
二叉树经典14题——初学二叉树必会的简单题
此篇皆为leetcode、牛客中的简单题型和二叉树基础操作,无需做过多讲解,仅付最优解。有需要的小伙伴直接私信我~ 目录 1.二叉树的节点个数 2.二叉树叶子节点个数 3.二叉树第K层节点个数 4.查找值为X的节点 5.leetcode——二叉树的最大深度 6.leetc…...
基于NMOSFET的电平转换电路设计
一、概述: 在单片机系统中,5V、3.3V是芯片常用的电平。而在传输协议中(如IIC、SPI等协议),存在芯片与芯片的高电平和低电平定义的范围不一样,所以需要存在一个电平转换电路,来使芯片与芯片之间顺利的传输。 二、前置…...
mongoDB搭建集群
(学习自黑马)下载对应linux版本MongoDB源码下载地址:https://www.mongodb.com/download-center#community目前在一台服务器开三个端口模拟三个mongodb, 配置一个主节点27017,一个从节点27018,一个仲裁者27019配置主节点,副节点,仲裁节点(下面的创建文件一共有三份,通…...
[深入理解SSD系列 闪存2.1.5] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
前言 上面是我使用的NAND FLASH的硬件原理图,面对这些引脚,很难明白他们是什么含义, 下面先来个热身: 问1. 原理图上NAND FLASH只有数据线,怎么传输地址? 答1.在DATA0~DATA7上既传输数据,又传输地址 当ALE为高电平时传输的是地址, 问2. 从NAND FLASH芯片手册可知,要…...
最新 JVM 面试经典问题
文章目录 说说JVM的内存布局?知道new一个对象的过程吗?知道双亲委派模型吗?说说有哪些垃圾回收算法?标记-清除复制算法标记-整理那么什么是GC ROOT?有哪些GC ROOT?垃圾回收器了解吗?年轻代和老年代都有哪些垃圾回收器?G1的原理了解吗?什么时候会触发YGC和FGC?对象什么…...
HTML5 和 CSS3 的新特性
目标能够说出 3~5 个 HTML5 新增布局和表单标签能够说出 CSS3 的新增特性有哪些HTML5新特性概述HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持&…...
Vulnhub系列:FristLeaks
一、配置靶机环境以往的靶机,本人是在virtual box中,去配置,和vm上的kali进行联动,但是这个靶机需要DHCP,以往的方式可能不太行了,或者可以在virtual box中桥接成统一网卡。下面介绍下本人最有用的方法&…...
XWiki Annotation Displayer 存在任意代码执行漏洞(CVE-2023-26475)
漏洞描述 XWiki 是一个开源的企业级 Wiki 平台,Annotation Displayer 是 XWiki 中的一个插件,用于在 XWiki 页面上显示注释和其他相关内容。 该项目受影响版本存在任意代码执行漏洞,由于Annotation Displayer 对 Groovy 宏的使用没有限制&a…...
数字孪生GIS智慧风场Web3D可视化运维系统
随着国家双碳目标的实施,新能源发电方式逐渐代替了污染大气层的火力发电,其中风力发电相比于光伏发电具有能量密度高、发电小时数长、生命周期达20-25年之久等独特的优势。风能取之不尽、用之不竭,在新型能源互联网下,风力发电有可…...
Retrofit核心源码分析(二)- 网络请求和响应处理
在上一篇文章中,我们详细分析了 Retrofit 中的注解解析和动态代理实现,本篇文章将继续深入研究 Retrofit 的核心源码,重点分析 Retrofit 如何进行网络请求和响应处理。 网络请求 在使用 Retrofit 发起网络请求时,我们可以通过定…...
STM32启动模式讲解与ICP下载电路
一、官方提供的启动模式说明硬件BOOT引脚接法表格从表格可以看出有三种启动模式,然后对应这不同的存储器启动,那我们现在疑问为啥有三种不能只有一种就好,还有存储器启动区域怎么区分,有些乱,带着这些疑问,…...
5款小巧好用的电脑软件,让你的工作生活更加高效!
不得不说良心好软件让大家好评连连,爱不释手,不像某些软件自带广告弹窗。这期就由我给大家安利几款电脑中的得力助手,看看你都用过几个? 1.桌面管理神器——Coodesker Coodesker是一款免费小巧、无广告,功能简单的桌…...
python线程池
假设我们必须多线程任务创建大量线程。 由于线程太多,因此可能会有很多性能问题,这在计算上会是最昂贵的。 一个主要问题可能是吞吐量受限。 我们可以通过创建一个线程池来解决这个问题。 一个线程池可以被定义为一组预先实例化和空闲的线程,…...
深入浅出PaddlePaddle函数——paddle.ones_like
分类目录:《深入浅出PaddlePaddle函数》总目录 相关文章: 深入浅出PaddlePaddle函数——paddle.Tensor 深入浅出PaddlePaddle函数——paddle.ones 深入浅出PaddlePaddle函数——paddle.zeros 深入浅出PaddlePaddle函数——paddle.full 深入浅出Padd…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
