【NLP 12、深度学习15条调参经验】

反正是绚烂,反正是到来

反正是背负慢慢凋残的孤独

耀眼的孤独,义无反顾的孤独

                                —— 24.12.9

深度学习15条调参经验

1.调参

调参是锦上添花的事,而底线取决于模型的选择和数据的清洗

2.关于model

① 尽量不要自己手写模型,找一个没有bug或者已经走通的模型自己去修改

② 当数据量少的时候,最好使用带预训练参数(如Imagenet)的模型微调

3.关于数据

① 数据量太大的情况下,可以先用1/10,1/100的数据去估算一下训练或者推理时间,心里有个底

② 视觉问题一定要使用数据增强

③ 一定要进行数据预处理,把数据分布分散到均值0,方差为1的区间,利于训练模型

4.关于调参

有哪些参数可以调节呢?

Loss function(损失函数)

Learning rate(学习率)

Batch size(训练批次的大小)

Epoch number(训练轮数)

Optimizer(优化器)

Activation function(激活函数)

Weights initialization(权重初始化)

使用Regularization(正则化)

Validation(验证集)

使用的GPU个数

5.关于Loss function 损失函数

Loss function(损失函数)Model(模型)数据之外,第三重要的参数。具体使用MSE(均方差损失函数)、Cross entropy(交叉熵损失函数)、Focal(焦点损失函数)还是其他自定义,需要具体问题具体分析。

6.关于 Learning rate 学习率 和 batch size 批次大小

(1)Learning rate(学习率)训练批次(batch size)是两个重要的参数,而且二者也是相互影响的,在反向传播时直接影响梯度。一般情况下,先调batch size,再调learning rate

(2)batch size不能太大,也不能太小,太小会浪费计算资源太大则会浪费内存;一般设置为16的倍数

(3)如果使用微调,则learning rate(学习率)设置为0.0001较好。learning rate设置上有很多trick(技巧),包括cosine learning rate(余弦退火学习率)等。

7.关于Epoch number和early stopping

(1)Epoch number(模型训练过程中所经历的完整数据集遍历次数) 和 Early stopping(早期停止)是息息相关的,需要输出loss看一下,到底是什么epoch时效果最好,及时early stopping。

(2)Epoch(模型完整遍历一次训练数据集)越大,会浪费计算资源,epoch太小,则训练模型提取特征没到极致。

(3)此外,也要明白Epoch模型完整遍历一次训练数据集)、lteration(一次参数更新的过程)、batch size(批次大小)的关系,一个 Epoch 意味着模型对整个训练数据集完整遍历一次。假设训练数据集包含 N个样本,Batch size 设为 m,则在一个 Epoch 里的 Iteration 次数为 N / m (若N不能被m 整除则向上取整)。

8.关于Optimizer 优化器

(1)AdamSGDM是最常用的两个,前者能快速收敛,后者收敛慢但最终精度更高。现在大家会先使用Adam快速收敛,后面再用SGDM提升精度。

(2)如果必须二选一的话,我会推荐Adam

9.关于Activation 激活函数

(1)ReLu、Sigmoid、Softmax、Tanh是最常用的4个激活函数

(2)对于输出层,常用 sigmoid softMax 激活函数,中间层常用 ReLu 激活函数,RNN(循环神经网络)常用Tanh激活函数。

10.关于Regularization 正则化

预训练参数是最好的参数切始化方式,其次是Xavir.

11.关于Weights initialization 权重初始化

Dropout虽然思想很简单,但效果出奇的好,首选0.5.

12.Batch normalization 批量归一化 很好用

13.loss的证明

如果在train(训练)模型时,loss可以降到非常低,那么模型的学习能力是够的,如果train能达到,Validation(验证集)达不到,则说明模型泛化能力不强

14.调参一定要做好笔记,每次只调节一个参数

15.如何在验证集上筛选模型参数

Validation(验证集)筛选模型参数时,可以除loss函数外,设置某种规则引导模型向某个想要的方向去更新参数

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

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

相关文章

美畅物联丨视频接入网关如何配置 HTTPS 证书

在安防领域,视频接入网关(Video Access Gateway,VAG)是视频监控系统的重要组成部分,其职责是把视频数据从前端设备传输至后端服务器。配置HTTPS证书后,可对视频流进行加密传输,避免数据在网络传…

fastcam编程套料软件

Fastcam是一款功能强大的专业软件,以下是对它的具体介绍: 基本信息 • Fastcam自1982年推出首个交互式CNC编程和套料系统后,一直不断更新发展. • 它是为数控火焰、等离子、激光和水射流切割机等数控切割机开发的编程套料软件. 主要功能模…

【大语言模型】LangChain ModelsIO与Models I/O Promopts详解

【大语言模型】LangChain ModelsIO与Prompts详解 一、LangChain ModelsIO1、简介2、Models I/O 的应用场景3、Models I/O 主要模块3.1、Prompts3.2、Modelsa、MESSAGES 类型 3.3、Output Parsers 二、LangChain ModelsIO Prompts1、简介2、Prompts 的优点3、实战示例3.1、Promp…

MicroBlaze软核开发(三):DDR + FLASH

实现功能:使用 MicroBlaze软核,配置 DDR、Flash 接口,并将程序烧写固化到Flash,每次启动 FPGA 时自动运行 Flash 中的程序 。 Vivado版本:2018.3 FPGA:Xilinx Artix-7 系 目录 引言 Vivado部分&#xff1…

Springboot(五十三)SpringBoot3整合redisson

前边我们有记录Springboot2/3整合redis的方式。是基于Springboot默认集成的Lettuce客户端实现的。 今天我们在项目中集成的redission是在Lettuce之上构建的redis客户端。 Redisson:一个在Jedis和Lettuce之上构建的Redis客户端。提供了一系列分布式Java对象和服务,比如:分布式…

渗透测试基础

渗透测试基础是指对计算机系统、网络或应用程序进行模拟攻击,以发现其安全漏洞和潜在威胁的一种安全评估技术。通过模拟真实的攻击场景,渗透测试帮助组织了解其系统的安全弱点、验证防护措施的有效性,并提供改进建议。 渗透测试的核心概念 1…

ejb组件(rmi) webservice平台(xml)

springboot bean 在 Spring Boot 中,Bean 是 Spring 框架的核心概念之一,表示由 Spring 容器管理的对象。通过 Bean 或其他注解(如 Component、Service、Repository 等)来定义和管理这些对象。以下是关于 Spring Boot 中 Bean 的…

11.23[大数据]

PRO1:LSTM模型预测输出都是同一个值? 画出来的图像就是一条横线 这个搜了搜,原因可能有很多,但感觉最主要的原因极可能是激活函数选择不当,以及层的搭建不合适 原模型是 REF https://zhuanlan.zhihu.com/p/654325094 https:/…

基于SpringBoot+Vue的新闻管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展,信息传播速度不断加快,新闻媒体行业面临着巨大的机遇与挑战。传统的新闻媒体正在逐渐向数字化转型,而新闻管理系统作为数字化新闻媒体的核心组成部分,其…

VCP-CLIP A visual context prompting modelfor zero-shot anomaly segmentation

GitHub - xiaozhen228/VCP-CLIP: (ECCV 2024) VCP-CLIP: A visual context prompting model for zero-shot anomaly segmentation 需要构建正样本,异常样本,以及对应的Mask

el-menu修改el-menu-item的高度后,里面的文字和图标高度没跟着变

解决方法 设置line-height的值和height一样。 <style lang"scss" scoped> .el-menu-item {height: 40px;line-height: 40px; } </style>

【C语言】完成程序设计填空

文章目录 1、请阅读下面的程序,在空白处填写正确的代码,要求各在一行从头开始输出m和n的值。2、求100~599之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。3、以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序 拆分并输出。请填空…

MySQL-DDL之数据表操作

文章目录 一. 表的创建1. 表的创建2. 栗子 二. 查看表1. 查看数据库中的所有表2. 查看表结构 三. 删除表1. 删除表 四. 修改表结构1. 添加字段2. 修改字段3. 删除字段4. 修改表名 数据定义语言&#xff1a;简称DDL(Data Definition Language) 一. 表的创建 1. 表的创建 格式&…

【开源安全保护】如何安装JumpServer堡垒机

【开源安全保护】如何安装JumpServer堡垒机 什么是堡垒机 大家好&#xff0c;我是星哥&#xff0c;今天我以前来认识堡垒机 堡垒机&#xff08;Bastion Host&#xff09;&#xff0c;也称为跳板机&#xff08;Jump Server&#xff09;&#xff0c;是指在计算机网络中&#x…

【经典论文阅读】DDPM(Diffusion)

DDPM&#xff08;Diffusion&#xff09; denoising diffusion probabilistic models 【生成模型】DDPM概率扩散模型&#xff08;原理代码)-CSDN博客 【DDPM】一文看懂去噪扩散概率模型&#xff0c;公式讲解、代码实现与最全详解&#xff08;一&#xff09;-CSDN博客 【DDPM】…

RPC设计--TcpConnection和TcpServer

TcpConnection 对于服务端来说用来封装clientfd&#xff0c;对于client端来说&#xff0c;就是封装connect函数返回后的fd. 处理此fd上的读写&#xff0c;因此需要为其提供read\write方法&#xff0c;其方法内部调用系统的read\write函数&#xff0c;从fd中读写数据。 当Fd上…

重拾Java:穿越最具多功能性的编程语言之旅

你知道Java是世界上最广泛使用的编程语言之一吗&#xff1f;无论是用于Web应用、企业系统&#xff0c;还是Android开发&#xff0c;Java始终是各级开发者的可靠选择。 在完成SESI SENAI的系统开发技术培训后&#xff0c;我决定重新学习这门语言。现在&#xff0c;我将其与我正…

Swagger四种定义UI界面

以下四种UI必须基于springfox-boot-starter <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> 创建swagger相关的配置类如下: pack…

Kafka 常见面试题深度解析

一、基础概念 1. 请简要介绍 Kafka 的基本架构。 Kafka 主要由生产者&#xff08;Producer&#xff09;、消费者&#xff08;Consumer&#xff09;、代理&#xff08;Broker&#xff09;、主题&#xff08;Topic&#xff09;和分区&#xff08;Partition&#xff09;等组成。…

高级java每日一道面试题-2024年12月08日-JVM篇-什么是类加载器?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是类加载器? 我回答: 在Java高级面试中&#xff0c;类加载器&#xff08;ClassLoader&#xff09;是一个重要的概念&#xff0c;它涉及到Java类的加载和初始化机制。以下是对类加载器的详细解释&#xff1a; 定义与作用 类加…