首页 > 其他分享 >创建用于预测序列的人工智能模型,调整模型的超参数。

创建用于预测序列的人工智能模型,调整模型的超参数。

时间:2024-12-27 11:54:59浏览次数:8  
标签:10 人工智能 模型 学习 epoch 1e 序列 lr

上一篇:《创建用于预测序列的人工智能模型(四),评估模型的能力》

序言:人工智能模型的研发过程实际上是一个多阶段的迭代过程,包括数据准备、模型架构设计、训练和验证,而超参数的调整和优化则始终贯穿其中,是提升模型性能的重要环节。

调整学习率

在前面的例子中,你可能还记得,我们使用了如下的优化器来编译模型:

model.compile(loss="mse",

optimizer=tf.keras.optimizers.SGD(lr=1e-6, momentum=0.9))

在这里,我们使用了一个学习率为 1×10−61 \times 10^{-6}1×10−6。但这个数字看起来像是随便选的。如果改变它会怎么样?我们又该如何找到最优的学习率呢?这需要大量的实验来找到最佳值。

幸运的是,tf.keras 提供了一种回调函数,可以帮助你随着时间调整学习率。在第 2 章中你学过回调函数,它会在每个 epoch 结束时被调用,比如用于在准确率达到目标时取消训练。

你也可以使用回调函数调整学习率参数,并将该参数的值与相应 epoch 的损失进行绘图,从而确定最佳的学习率。

要实现这一点,可以创建一个 tf.keras.callbacks.LearningRateScheduler,并让它填充 lr 参数的初始值。例如:

lr_schedule = tf.keras.callbacks.LearningRateScheduler(

lambda epoch: 1e-8 * 10**(epoch / 20))

在这个例子中,我们的学习率从 1e−81e^{-8}1e−8 开始,然后每个 epoch 增加一点点。当完成 100 个 epoch 时,学习率将达到大约 1e−31e^{-3}1e−3。

接下来,可以用初始学习率 1e−81e^{-8}1e−8 初始化优化器,并在 model.fit 调用中指定使用这个回调:

optimizer = tf.keras.optimizers.SGD(lr=1e-8, momentum=0.9)

model.compile(loss="mse", optimizer=optimizer)

history = model.fit(dataset, epochs=100,

callbacks=[lr_schedule], verbose=0)

通过 history = model.fit,训练历史(包括损失)会被保存下来。然后你可以用以下代码将每个 epoch 的学习率与损失绘制在一起:

lrs = 1e-8 * (10 ** (np.arange(100) / 20))

plt.semilogx(lrs, history.history["loss"])

plt.axis([1e-8, 1e-3, 0, 300])

这段代码设置了学习率值,与 lambda 函数使用的公式相同,并将其与 1e−81e^{-8}1e−8 到 1e−31e^{-3}1e−3 范围内的损失进行绘图。结果如图 10-4 所示:

图 10-4:绘制学习率与损失的关系图

从图中可以看出,虽然之前将学习率设置为 1e−61e^{-6}1e−6,但 1e−51e^{-5}1e−5 对应的损失更小。因此,你可以重新定义模型,将学习率设置为新的值 1e−51e^{-5}1e−5。

训练模型后,你可能会发现损失有所降低。在我的例子中,学习率为 1e−61e^{-6}1e−6 时最终损失为 36.5,而学习率为 1e−51e^{-5}1e−5 时损失降低到了 32.9。然而,当我对所有数据进行预测时,结果如图 10-5 所示,预测看起来有些偏差。

图 10-5:调整学习率后的图表

当我测量 MAE(平均绝对误差)时,结果是 4.96,比之前稍微退步了一点!

话虽如此,一旦你确定了最佳学习率,就可以开始探索其他方法来优化网络的性能了。一个简单的起点是调整窗口大小——用 20 天的数据预测 1 天的结果可能不够充分,你可以尝试使用 40 天的数据窗口。另外,也可以尝试训练更多的轮次(epochs)。通过一些实验,你可能会把 MAE 降到接近 4,这已经是个不错的结果了。

总结:优秀的人工智能研发工程师对超参数的掌握就如同驾驶技能之于司机,是一项基本却至关重要的能力。熟练调整超参数不仅能优化模型性能,还能缩短研发周期,提高解决复杂问题的效率。这种能力是人工智能开发中不可或缺的一部分,贯穿于整个模型训练和优化的迭代过程。

标签:10,人工智能,模型,学习,epoch,1e,序列,lr
From: https://blog.csdn.net/JellyAI/article/details/144758094

相关文章

  • 大模型来了会淘汰掉什么行业?哪些大模型的岗位是刚需?
    随着科技的不断发展,越来越多的大型模型被开发出来。虽然这些大型模型可以解决许多复杂的问题,但是它们也会对某些行业造成影响。以下是一些可能会被大型模型淘汰掉的行业:人工客服:随着大型模型的出现,人工智能辅助客服的功能将得到极大的提升。这意味着传统的人工客服可能需......
  • 13. OSGI(动态模型系统)
    OSGi(OpenServiceGatewayInitiative),是面向Java的动态模型系统,是Java动态化模块化系统的一系列规范。a)动态改变构造OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些......
  • 利用GaussDB的可观测性能力构建故障模型
    ​D-SMART高斯专版已经开发了几个月了,目前主要技术问题都已经解决,也能够初步看到大概的面貌了。有朋友问我,GaussDB不已经有了TPOPS了,为什么你们还要开发D-SMART高斯专版呢?实际上TPOPS和D-SMART虽然都可以用于Gaussdb的运维监控,不过其分工还是十分明显的。TPOPS是华为GaussDB自带......
  • 颠覆认知!Meta 发布全新“概念模型”,或将迎来“乐高式”进化
    最近科技圈又迎来一项重磅突破!Meta悄然发布了一篇名为"LargeConceptModels:LanguageModelinginaSentenceRepresentationSpace"的论文,直接提出了一个颠覆性的AI模型架构,很有可能把我们带入NLP(自然语言处理)的下一个时代!https://arxiv.org/pdf/2412.08821你可能对......
  • 《LLM入门教程》大模型教程笔记5:一、面向开发者的提示工程——2. 提示原则——原则二:
    项目地址:llm-cookbook教程在线阅读:面向开发者的LLM入门教程openAIPython库版本:1.52.1文章目录第二章提示原则二、原则二给模型时间去思考2.1指定完成任务所需的步骤复杂任务需求代码示例(原)代码示例(基于原代码修改)存在问题改进prompt(进一步告知大模型需要的输出格......
  • Qt 模型Model/视图View/代理Delegate
    一、模型/视图/代理架构简介1、应用程序中往往要存储大量的数据,并对它们进行处理,然后可以通过各种形式显示给用户,用户需要时还可以对数据进行编辑。2、Qt中的模型/视图架构就是用来实现大量数据的存储、处理及其显示的。3、MVC设计模式:(1)、模型(Model)是应用对象,用......
  • 用Python开启人工智能之旅(五)AI项目实战中Python基础
    用Python开启人工智能之旅(一)Python简介与安装用Python开启人工智能之旅(二)Python基础用Python开启人工智能之旅(三)常用的机器学习算法与实现用Python开启人工智能之旅(四)常用的机器学习算法与实现用Python开启人工智能之旅(五)AI项目实战中Python基础在实际的AI项目中,应用......
  • Oracle WebLogic Server反序列化漏洞(CVE-2024-21216)
    免责声明请勿使用本文中提到的技术进行非法测试或行为。使用本文中提供的信息或工具所造成的任何后果和损失由使用者自行承担,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。一、简介WebLogic是一款由BEA系统公司开发的JavaEE应用服务器,现由Oracle......
  • NLP论文速读(AAAI 2024)|面向序列生成的基于高效采样强化学习 (Efficient Sampling-ba
    论文速读|ESRL:EfficientSampling-basedReinforcementLearning forSequenceGeneration论文信息:简介:   本文探讨了将强化学习(ReinforcementLearning,RL)应用于序列生成模型的背景。序列生成是一个长期决策问题,而RL特别适合优化长期奖励,例如序列级别的评分......
  • 使用纯css3画一个火箭的模型
    要使用纯CSS3来绘制一个火箭的模型,你可以利用CSS的伪元素(:before和:after),边框(border),线性渐变(linear-gradient),以及转换(transform)等属性。以下是一个简单的火箭模型的示例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport&......