【经验总结】 常用的模型优化器

news2024/10/6 1:34:30

优化器是一种用于优化模型权重和偏差的算法,它根据训练数据更新模型参数,以模型的预测结果更加准确。

1. 常见的优化器

  1. SGD(Stochastic Gradient Descent):SGD是一种基本的优化算法,它在每次迭代中随机选择一个样本进行梯度计算和参数更新。SGD使用固定的学习率,通常需要更多的迭代才能收敛,但在一些情况下也可以取得很好的效果,简单易于实现,但在非凸优化问题中可能会出现收敛速度慢的问题。

  2. RMSprop(Root Mean Square Propagation):RMSprop是自适应学习率的一种方法,它在训练过程中调整学习率,以便更好地适应不同特征的梯度。RMSprop通过维护梯度平方的移动平均来调整学习率。

  3. Adagrad(Adaptive Gradient):Adagrad是一种自适应学习率的优化器,它根据参数的历史梯度进行学习率调整。Adagrad适用于稀疏数据集,在训练初期对稀疏特征有较大的学习率,随着训练的进行逐渐减小。可能会在训练后期由于学习率过小导致收敛速度变慢。

  4. Adadelta:Adadelta是Adagrad的改进版本,它通过引入梯度平方的衰减平均来解决Adagrad学习率过早衰减的问题。Adadelta不需要手动设置学习率,并且在训练过程中可以自适应地调整学习率。

  5. Adam(Adaptive Moment Estimation):Adam是一种基于梯度的优化器,结合了自适应学习率和动量的概念。它在训练过程中自适应地调整学习率,并利用动量来加速梯度更新。Adam在很多NLP任务中表现良好。

  6. Adamax:Adamax是Adam的变体,它使用了无穷范数(infinity norm)来对梯度进行归一化。

  7. AdamW:AdamW是Adam的一种变体,它引入了权重衰减(weight decay)的概念。权重衰减可以有效防止模型过拟合。

  8. Nadam(Nesterov-accelerated Adaptive Moment Estimation):Nadam是Adam与Nesterov动量法的结合,它在Adam的基础上加入了Nesterov动量的修正项。

2. 示例代码

python代码:

import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.datasets import imdb
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD, RMSprop, Adagrad, Adadelta, Adamax, Nadam
from transformers import AdamW
from sklearn.model_selection import train_test_split
from tensorflow.keras.preprocessing import sequence

# 加载IMDB情感分类数据集
(X_train, y_train), (_, _) = imdb.load_data(num_words=10000)
X_train = X_train[:3000]  # 只使用部分数据进行演示
y_train = y_train[:3000]


# 数据预处理:将序列填充为相同长度
X_train = sequence.pad_sequences(X_train, maxlen=10000)

# 划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=36)

# 构建模型
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=10000))
model.add(Dense(1, activation='sigmoid'))

# 定义优化器列表
optimizers = [Adam(), SGD(), RMSprop(), Adagrad(), Adadelta(), Adamax(), Nadam()]
optimizer_names = ['Adam', 'SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adamax', 'Nadam']
# optimizer_names = ['Adam', 'SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adamax', 'Nadam', 'AdamW']
histories = []

# 训练模型并记录历史
for optimizer in optimizers:
    model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
    history = model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=160, batch_size=32, verbose=0)
    histories.append(history)

# 绘制学习曲线
plt.figure(figsize=(12, 6))
for i, history in enumerate(histories):
    plt.plot(history.history['val_loss'], label=optimizer_names[i])
plt.title('Validation Loss Comparison')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()

运行结果:
在这里插入图片描述

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

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

相关文章

借势吃货节趣味小游戏的效果是什么

吃货节对食品、餐饮等行业厂家/商家来说非常利好,借势节日气氛能更快达成预期营销效果,除了传统方式外,线上趣味互动游戏营销也是重要形式。 搜索【雨科】平台拥有多款吃货节趣味抽奖h5小游戏形式,不同玩法和内容承载、渠道传播用…

简单的Python HTML 输出

1、问题背景 一名初学者在尝试将 Python 脚本输出到网页上时遇到了一些问题。他当前使用 Python 和 HTML 进行开发,并且遇到了以下问题: 担心自己的代码过于复杂,尤其是 WebOutput() 函数。希望通过 JavaScript 使用 HTML 模板文件更新数据。…

48. UE5 RPG 实现攻击伤害数字显示

在前面的文章中,我们实现了对敌人的攻击的受击效果,并且能够降低目标的血量,实现死亡效果。相对于正常的游戏,我们还需要实现技能或者攻击对敌人造成的伤害数值,并直观的显示出来。 所以,接下来&#xff0c…

【JAVA】JAVA的垃圾回收机制详解

对于Java的垃圾回收机制,它是Java虚拟机(JVM)提供的一种自动内存管理机制,主要负责回收不再使用的对象以释放内存空间。垃圾回收机制主要包括以下几个方面的内容: 垃圾对象的识别:Java虚拟机通过一些算法&…

MySQL索引优化(超详细)篇章2--索引调优

目录 1.索引失效状况2.性能分析3.表的索引信息--调整索引顺序4.删除冗余索引5.最佳左前缀法则5.1下面是一个实际的例子来说明这个概念: 6.数据长度和索引长度占用空间比较 1.索引失效状况 MySQL索引失效通常指的是查询语句无法有效地利用索引,而导致全表…

matlab打开文件对话框

在使用matlab GUI制作时,为了便于用户交互使用,经常设置文件打开对话框,让用户根据实际需要选择打开的文件。下面以打开一张图片为例,matlab代码如下: [temp_filepath,temp_filename]uigetfile(*.jpg,请选择要打开的图…

设计模式(2)创造型设计模式

创建型模式 创建型模式1.工厂模式1.1 抽象工厂模式(Abstract factory)1.2 工厂方法模式(Factory Method)1.3 简单工厂模式(Simple Factory) 2. 建造者模式(Builder)3. 原型模式&…

【Spring Boot 源码学习】深入 ApplicationArguments 接口及其默认实现

《Spring Boot 源码学习系列》 深入 ApplicationArguments 接口及其默认实现 一、引言二、主要内容2.1 ApplicationArguments2.2 DefaultApplicationArguments2.2.1 成员变量2.2.2 构造方法2.2.3 成员方法 2.3 SimpleCommandLinePropertySource2.4 应用场景2.4.1 准备和配置应用…

基于FPGA的音视频监视器,音视频接口采集器的应用

① 支持1路HDMI1路SDI 输入 ② 支持1路HDMI输出 ③ 支持1080P高清屏显示实时画面以 及叠加的分析结果 ④ 支持同时查看波形图(亮度/RGB)、 直方图、矢量图 ⑤ 支持峰值对焦、斑马纹、伪彩色、 单色、安全框遮幅标记 ⑥ 支持任意缩放画面,支…

【Java EE】数据库连接池详解

文章目录 🎍数据库连接池🌸Hikari🌸Druid 🍀MySQL开发企业规范⭕总结 🎍数据库连接池 在上⾯Mybatis的讲解中,我们使⽤了数据库连接池技术,避免频繁的创建连接,销毁连接 下⾯我们来了解下数据库连接池 数据库连接池负…

如何利用代理IP进行SEO优化?

“SEO”这个词相信对于做在线业务的朋友来说一定不陌生。 在网络营销中,SEO是至关重要的一环,对于增加有机流量、提升品牌知名度、增加网站的信任度和权威性非常有效。而代理IP在SEO优化中有着不可或缺的作用,它可以帮助网站管理员和SEO专家…

[muduo网络库]——muduo库的Reactor模型(剖析muduo网络库核心部分、设计思想)

一、前言 在学习 C 服务端的过程中,必不可少的一项就是熟悉一个网络库,包括网络库的应用和其底层实现。我们熟知的网络库有 libevent、libev、muduo、Netty 等,其中 muduo 是由陈硕大佬个人开发的 TCP 网络库,最近跟着课程正在深…

回炉重造java----单列集合

体系结构: 集合主要分为两种,单列集合collection和双列集合Map,区别在于单列集合一次插入一条数据,而双列的一次插入类似于key-value的形式 单列集合collection 注:红色的表示是接口,蓝色的是实现类 ①操作功能: 增加: add()&am…

上亿用户面临风险!小米、WPS等知名安卓应用竟藏有“文件覆盖”漏洞

Google Play商店中的几款热门安卓应用程序容易受到与路径遍历相关的漏洞攻击,该漏洞的代号为“Dirty Stream”攻击,恶意应用程序可能会利用此漏洞覆盖易受攻击的应用程序主目录中的任意文件。 微软威胁情报团队的Dimitrios Valsamaras在周三发布的一份报…

【最新点云数据增强综述】深度学习点云数据增强技术的进展

深度学习(DL)已成为点云分析任务(如检测、分割和分类)的主流和有效方法之一。为了减少深度学习模型训练过程中的过拟合,提高模型性能,尤其是在训练数据的数量和/或多样性有限的情况下,增强往往至关重要。虽然各种点云数据增强方法已被广泛应用于不同的点云处理任务中,但…

9.为什么有时候会“烫烫烫”——之函数栈桢

目录 1. 什么是函数栈帧 2. 理解函数栈帧能解决什么问题呢? 3. 函数栈帧的创建和销毁解析 3.1 什么是栈? 3.2 认识相关寄存器和汇编指令 3.3 解析函数栈帧的创建和销毁 小知识:烫烫烫~ Q&A 1. 什么是函数栈帧 我们在写C语言代码…

2024 年 数维杯(A题)大学生数学建模挑战赛 | 多源机会信号建模| 数学建模完整代码+建模过程全解全析

2024数维杯数学建模A题B题C题思路模型代码(开赛后第一时间更新)及时留意关注哦 https://mbd.pub/o/bread/ZpWakpdq https://mbd.pub/o/bread/ZpWakpdq 2024数维杯数学建模A题B题C题思路模型代码(开赛后第一时间更新)及时留意关注…

leetcode63.跳跃游戏2(动态规划)

问题描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物…

vue项目中使用websocke即时通讯实现系统公告实时获取并提醒

一、使用场景 发布者设置需要发布的公告内容、公告接收用户和发布时间,到达发布时间时及时通知提醒已登录系统用户,使用websocke来实现前端与服务器保持长连接,以便实时过去公告信息。 WebSocket是一种在单个TCP连接上进行全双工通信的协议…

17.Blender RC大佬EEVEE皮肤节点预设导入

如何添加节点预设 在底下的左下角打开Geometry Node Editor 选中正方体,点击新建 当鼠标指针在两个模块之间,是十字的样子时 可以拖出一个新的板块 然后打开文件浏览器 找到节点预设然后拖入到底下的节点编辑界面就可以了或者是blend文件&#xf…