欢迎光临散文网 会员登陆 & 注册

新手入门|使用Optuna进行Pytorch超参数调优教程

2021-08-12 20:00 作者:深度之眼官方账号  | 我要投稿

使用Pytorch构建深度学习模型的一系列指南中的第四篇来啦!Optuna作为主要面向深度学习超参数调优开发的框架,在实现之初就考虑到了大型模型参数调优的各种实际情况,并逐一针对它们设计了解决方案。今天学姐就带大家学习如何使用Optuna进行Pytorch超参数调优。


前三篇传送门:

1.Pytorch初学者教程

2.了解深度学习模型中的张量维度

3.CNN和特征可视化


0Optuna介绍


Optuna是一个自动超参数搜索的超参数优化框架,可应用于机器学习和深度学习模型;Optuna使用了采样和剪枝算法来优化超参数,所以非常快速和高效;它还可以通过直观的方式动态构建超参数搜索空间。


本篇文章的重点是结合Pytorch和Optuna,在MNIST数据集上找到性能最佳的CNN模型。我将逐步展示应用Optuna所需的函数和要调整的超参数。



0MNIST分类器与Optuna


先安装Optuna库


之后导入库和数据集


接着将卷积神经网络一起定义到要调整的超参数


在Optuna中,目标是最小化/最大化目标函数,它将一组超参数作为输入并返回验证分数。对于每个超参数,需要考虑不同范围的值。

优化的过程称为研究,而对目标函数的每次评估称为试验。“Suggest API”在模型架构内被调用,为每个试验动态生成超参数。

可以定义超参数范围的函数:

  • suggest_int 建议为第二完全连接层的输入单元设置整数值


  • suggest_float 建议dropout率的浮点值,在第二个卷积层(0-0.5,步长为0.1)和第一个线性层(0-0.3,步长为0.1)之后作为超参数引入。


  • suggest_categorical 建议优化器的分类值,稍后将显示

更多资料:

https://optuna.readthedocs.io/en/v1.4.0/reference/trial.html


定义了一个函数来尝试训练集中batch_size的不同值。它将训练数据集和批大小作为输入(稍后将在目标函数中定义),并返回训练和验证加载器对象。



0最优化(Optimization)

最重要的一步是定义目标函数,它使用采样程序来选择每次试验中的超参数值,并返回在该试验中获得的验证准确度。



下面创建一个study对象来最大化目标函数,然后使用study.optimize(objective,n_trials = 20)进行研究,将试验次数定为20次。可以根据问题的复杂程度对其进行更改


为了更容易地可视化最近5次试验中选择的超参数,我们可以构建一个DataFrame对象:



性能最好的模型在第 20 次试验中获得了 98.9% 的验证准确率。上面是该试验中选择的超参数值。


0使用Optuna进行可视化

有许多有趣的可视化方法可以帮助查看优化的不同方面。我们可以看到目标值如何随着试验次数的增加而增加。




x轴是试验数据,y轴是客观值,对应于验证精度。仅通过20次试验,我们就可以看到我们获得了90%以上的高分。


我们还可以证明不同超参数之间的关系。在这种情况下,我们只关注批量大小和学习率:



Contour Plot是一个3D图,其中第三维由目标值构成。从中心的集群(浅蓝色表示验证准确率非常高),我们可以观察到这些结果是在中等学习率(介于0.001和0.01之间)和低/中等批量大小下获得的。

使用平行坐标图,我们可以观察到所有已考虑到的优化历史:


另一个有用的表示由超参数重要性构成。因此,可以了解到哪些超参数对模型的性能影响最大。

从图中可以看出,学习率对目标值的影响最大,而其他超参数对学习率的影响很小。丢失率对性能的影响很小,但仍然需要降低过拟合的风险。


希望学姐的这篇文章能够帮助你理解Optuna!


原文链接:

https://pub.towardsai.net/tuning-pytorch-hyperparameters-with-optuna-470edcfd4dc


学姐终于建群了~公众号后台回复“进群”拉你进群



分享收藏点赞在看

新手入门|使用Optuna进行Pytorch超参数调优教程的评论 (共 条)

分享到微博请遵守国家法律