如何使用Optuna在PyTorch中进行超参数优化

所有神经网络在训练过程中都需要选择超参数,而这些超参数对收敛速度和最终性能有着非常显著的影响。

这些超参数需要特别调整,以充分发挥模型的潜力。超参数调优过程是神经网络训练中不可或缺的一部分,某种程度上,它是一个主要基于梯度优化问题中的“无梯度”部分。

在这篇文章中,我们将探讨超参数优化的领先库之一——Optuna,它使这一过程变得非常简单且高效。我们将把这个过程分为5个简单的步骤。

第一步:定义模型

首先,我们将导入相关的包,并使用PyTorch创建一个简单的全连接神经网络。该全连接神经网络包含一个隐藏层。

为了保证可复现性,我们还设置了一个手动随机种子。

在这里插入图片描述

第二步:定义搜索空间和目标函数

接下来,我们将设置超参数优化所需的标准组件。我们将执行以下步骤:

1.下载FashionMNIST数据集。

2.定义超参数搜索空间:

我们定义(a)想要优化的超参数,以及(b)允许这些超参数取值的范围。在我们的例子中,我们将选择以下超参数:

  • 神经网络隐藏层大小——整数值。

  • 学习率——对数分布的浮点值。

  • 优化器选择:分类选择(无顺序),在以下选项中选择:[“Adam”, “SGD”]。

3.定义目标函数:

目标函数是一个方法,用于在短暂的“超参数调优运行”中训练模型,并返回“模型好坏”的衡量指标。它可以是多种指标的组合,包括延迟等。但为了简单起见,这里我们只使用验证准确率。

请注意,这里模型训练10个周期,目标函数的输出是验证准确率。

在这里插入图片描述在这里插入图片描述

第三步:添加剪枝(可选)

这是一个额外步骤!

作为设置阶段的最后一步,我们将添加Optuna剪枝功能,以便在超参数调优试验中提前停止表现不佳的试验。剪枝基于模型的“好坏”中间测量值;在我们的例子中,它是每个周期后的验证准确率。

这非常容易实现,我们只需在目标函数的末尾添加几行代码。

在这里插入图片描述在这里插入图片描述

解释:

  • trial.report() 用于报告每个周期的中间验证准确率。

  • trial.should_prune() 检查是否应根据试验相对于其他试验的表现来停止当前试验。

有关trial接口提供的其他功能的详细阅读,请参阅 optuna.trial.Trial

第四步:运行优化

现在,我们已经准备好开始优化超参数了!

我们将创建一个Optuna研究,并使用TPESampler作为超参数优化器、MedianPruner用于剪枝,运行指定次数的优化试验。请注意,由于超参数优化器使用伪随机数作为算法的一部分,如果我们希望得到可复现的结果,需在超参数优化器中设置种子。

优化完成后,最佳的超参数和验证准确率将会被打印出来。
在这里插入图片描述

第五步:可视化结果

优化完成后,Optuna提供了可视化工具来展示超参数优化过程的结果。虽然这些工具不是超参数调优过程中必不可少的一部分,但它们可以提供一些关键见解,帮助你在未来的迭代中做出改进。因为这个过程在超参数数量较少和搜索空间尽可能小的情况下效果最佳。

这里,我们将使用以下可视化方式:

  • 优化历史:展示所有试验随时间的表现。

  • 参数重要性:提供关于哪些超参数对模型准确率影响最大的见解。

在这里插入图片描述

综合总结

运行上述代码块后,你应该能看到以下输出:

[I 2024-09-22 12:16:17,945] A new study created in memory with name: no-name-9e0ab75f-ea67-4ceb-8fe2-3ae6492edbc7   
[I 2024-09-22 12:16:26,413] Trial 0 finished with value: 0.7085 and parameters: {'hidden_size': 116, 'lr': 0.06351221010640701, 'optimizer': 'Adam'}. Best is trial 0 with value: 0.7085.   
[I 2024-09-22 12:16:33,817] Trial 1 finished with value: 0.11366666666666667 and parameters: {'hidden_size': 67, 'lr': 4.207053950287933e-05, 'optimizer': 'SGD'}. Best is trial 0 with value: 0.7085.   
[I 2024-09-22 12:16:41,271] Trial 2 finished with value: 0.7810833333333334 and parameters: {'hidden_size': 167, 'lr': 0.006796578090758156, 'optimizer': 'SGD'}. Best is trial 2 with value: 0.7810833333333334.   
[I 2024-09-22 12:16:48,885] Trial 3 finished with value: 0.2735 and parameters: {'hidden_size': 219, 'lr': 7.068974950624602e-05, 'optimizer': 'SGD'}. Best is trial 2 with value: 0.7810833333333334.   
[I 2024-09-22 12:16:56,648] Trial 4 finished with value: 0.867 and parameters: {'hidden_size': 100, 'lr': 0.0012561043700013551, 'optimizer': 'Adam'}. Best is trial 4 with value: 0.867.   
[I 2024-09-22 12:16:59,220] Trial 5 pruned.    
[I 2024-09-22 12:17:06,916] Trial 6 finished with value: 0.8115 and parameters: {'hidden_size': 134, 'lr': 0.013826232179369865, 'optimizer': 'SGD'}. Best is trial 4 with value: 0.867.   
[I 2024-09-22 12:17:09,619] Trial 7 pruned.    
[I 2024-09-22 12:17:14,769] Trial 8 pruned.    
[I 2024-09-22 12:17:17,396] Trial 9 pruned.    
Best trial:
     Accuracy: 0.867     
     Best hyperparameters:  {'hidden_size': 100, 'lr': 0.0012561043700013551, 'optimizer': 'Adam'}   

最优(迄今为止最好的)超参数是:

  • 隐藏层大小 = 100

  • 学习率 = 0.0012561043700013551

  • 优化器 = ‘Adam’

这个超参数的选择将导致验证准确率为 0.867。

此外,运行程序将在你的本地浏览器中打开两个新选项卡,并展示以下可视化内容:

1.优化历史:

2.不同超参数的重要性得分:

图片

结论

本文为使用Optuna优化PyTorch训练的超参数提供了一个简单的指南,包含早期停止表现不佳试验的剪枝(MedianPruner),以及显式选择超参数优化算法(TPESampler)。

这种方法可以帮助你有效地找到最佳超参数,并通过丢弃表现不佳的试验节省时间。

希望你能将这些入门代码适配到你的用例中,加速训练并提高模型性能!

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值