使用Optuna进行PyTorch模型的超参数调优

news2024/11/24 10:35:51

Optuna是一个开源的超参数优化框架,Optuna与框架无关,可以在任何机器学习或深度学习框架中使用它。本文将以表格数据为例,使用Optuna对PyTorch模型进行超参数调优。

Optuna可以使用python pip安装,如pip install Optuna。也可以使用conda install -c conda-forge Optuna,安装基于Anaconda的python发行版。

正如您所看到的,使用基本python语言的几行代码,您可以为任何神经网络创建并执行试验。

OPUTNA有一个简单的基于API的实现,允许用户定义要优化的度量和要调查的超参数空间。只需要调用一个函数来执行优化过程。它支持广泛的优化算法,包括随机搜索、网格搜索和贝叶斯优化。并且它可以支持连续、整数和分类超参数的优化,以及具有复杂依赖关系的超参数。

Oputna的简单介绍

让我们先了解Oputna框架的基本术语,

Trial:-Trial是评估一个目标函数的过程。该对象传递给目标函数,提供获取参数建议、管理试用状态和设置/获取试用自定义属性的接口。

Study:一个Study对应于一个优化任务,即一组试验。该对象提供了运行新试验、访问试验历史、设置/获取研究本身的用户定义属性的接口。

Study中包含了一个重要的create_study方法,它是创建新的Study对象方法重要参数如下:

  • Objective :目标函数是Optuna优化超参数选择的核心。虽然暴力网格搜索也是寻找最小化目标函数,但它实际上并没有考虑到超参数的哪种组合效果好或不好。
  • Sampler :是一个采样器对象,实现了值建议的后台算法。如果指定None,则单目标优化时使用TPESampler,多目标优化时使用NSGAIISampler。
  • Pruner :是一个修剪器对象,决定提前停止没有希望的试验。如果指定None,则使用MedianPruner作为默认值。
  • Study_name:研究的名称。如果此参数设置为None,则自动生成唯一的名称。
  • Directions : 多目标优化过程中的方向序列。

Pytorch模型

为了适应Oputna的超参数是搜素,我们需要一个函数来根据不同的参数返回不同的Pytorch模型,大概是这个样子的:

我们几个超参数包括,In_Features ,N_Layers ,DropOut 和N_ouput

而trial 是Oputna传递的Trial 实现。

目标函数

目标函数由我们要优化的超参数组成。在我们的例子中,除了上面的模型的超参数外,还需要优化learning_rate、weight_decay和不同的优化器,所以定义如下:

训练循环

训练循环是Optuna中最重要的组成部分。在下面的例子中,我们对定义目标函数的参数字典进行参数化。

Study

正如我们上面所说的,Optuna研究在数据集中进行了多例试验,我们使用损失函数为RMSE,所以方向是最小化RMSE。在这个中使用TPESampler.Tree-structured估计器。

结果展示

由于数据集非常小,试验在25个循环内结束。以下是细节。下面给出了最佳试验和超参数组合,将RMSE最小化到0.058。

 Study statistics: 
   Number of finished trials:  25
   Number of pruned trials:  0
   Number of complete trials:  25
 Best trial: FrozenTrial(number=18, state=TrialState.COMPLETE, values=[0.058233041420927334], datetime_start=datetime.datetime(2023, 5, 21, 5, 9, 43, 683621), datetime_complete=datetime.datetime(2023, 5, 21, 5, 10, 7, 935450), params={'learning_rate': 0.0010084133367699304, 'optimizer': 'Adam', 'weight_decay': 0.00013535005248600755, 'n_layers': 2, 'dropout': 0.2, 'n_units_l0': 7, 'n_units_l1': 6}, user_attrs={}, system_attrs={}, intermediate_values={}, distributions={'learning_rate': FloatDistribution(high=0.01, log=True, low=0.001, step=None), 'optimizer': CategoricalDistribution(choices=('Adam', 'RMSprop', 'SGD')), 'weight_decay': FloatDistribution(high=0.001, log=True, low=0.0001, step=None), 'n_layers': IntDistribution(high=4, log=False, low=2, step=1), 'dropout': FloatDistribution(high=0.5, log=False, low=0.1, step=0.1), 'n_units_l0': IntDistribution(high=8, log=False, low=2, step=1), 'n_units_l1': IntDistribution(high=7, log=False, low=2, step=1)}, trial_id=18, value=None)
   Value:  0.058233041420927334
 Best Trail Params: 
     learning_rate: 0.0010084133367699304
     optimizer: Adam
     weight_decay: 0.00013535005248600755
     n_layers: 2
     dropout: 0.2
     n_units_l0: 7
     n_units_l1: 6

我们还可以通过下面的函数进行结果的可视化

optuna.visualization.plot_optimization_history(study)

optuna.visualization.plot_param_importances(study)

optuna.visualization.plot_slice(study)

optuna.visualization.plot_parallel_coordinate(study)

以上就是使用optuna调优Pytorch模型的全部过程,本文的源代码在这里,并且有完整的运行结果,如果你想自己调整或者学习,请看这个连接

https://avoid.overfit.cn/post/86d01db7af8845b88ff1c753e7200a50

作者:Ashish Verma

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

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

相关文章

【Spring】— 动态SQL :<foreach>元素、<bind>元素

目录 <foreach>元素<bind>元素 <foreach>元素 MyBatis中已经提供了一种用于数组和集合循环遍历的方式&#xff0c;那就是使用<foreach>元素。假设在一个用户表中有1000条数据&#xff0c;现在需要将id值小于100的用户信息全部查询出来&#xff0c;就可…

MFC(十三)多个对话框

设置向导模式 1.打开类视图&#xff0c;右键项目--->类向导-->添加Cpropsheet类&#xff0c;命名为mypropsheet CPropertySheet 是 MFC 的一个类&#xff0c;用于创建包含多个属性页的对话框。它可以使用内置的向导模式&#xff0c;向用户显示“下一步”和“上一步”按…

unity创建urp的方法

Unity里URP项目的介绍和创建 URP(Universal Render Pipeline)通用渲染管线&#xff0c;是Unity在2019.3版本之后推出的一种新的渲染管线。 对比起默认的渲染管线&#xff0c;他的使用上会产生了一些变化&#xff0c;包括了摄像机的使用、Shader的编写等。 传统的渲染管线在渲染…

采用动态规划来处理有向无环图最短路径问题,c++实现

采用动态规划来处理有向无环图最短路径问题&#xff0c;c实现 需求描述实现思路代码实现 需求描述 如图&#xff0c;在一个无环有向图中&#xff0c;找到起点0到终点的最短路径 实现思路 设s1,s2,…, st 是一条最短路径假设s1&#xff0c;s2&#xff0c;已求出&#xff0c;则…

JS 事件循环机制、调用栈、堆、主线程、宏任务队列、微任务队列、缓存管理之间的关系

一、事件循环机制 你是否想过&#xff0c;在控制台执行代码时&#xff0c;为什么能立即得到响应&#xff1f; 实际上&#xff0c;底层有一套模型机制叫 事件循环&#xff0c;换句话说&#xff0c;它是一个”死循环“&#xff0c; 里面负责监听&执行我们写的 JS 代码&#…

spring+springMVC+mybatis实现的物业管理系统

本系统借用了前辈的页面框架来实现了一个物业管理系统&#xff0c;使用到的主要技术有&#xff1a;SSM框架&#xff0c;MySql 8.0数据库&#xff0c;tomcat 8.0&#xff0c;使用maven进行依赖管理&#xff0c;前端页面使用的是jsp。整个系统分为用户端和管理员端。 用户端功能有…

Vue.js 中的权限控制是什么?如何进行权限控制?

Vue.js 中的权限控制是什么&#xff1f;如何进行权限控制&#xff1f; 在现代 Web 应用程序中&#xff0c;权限控制是一个重要的话题。Vue.js 作为一种现代的前端框架&#xff0c;提供了一些有用的工具和技术来实现权限控制。本文将介绍 Vue.js 中的权限控制的概念、作用以及如…

一文教你认清云渲染的优势和劣势

在当今数字化时代&#xff0c;云渲染作为一项创新的技术方案&#xff0c;正逐渐成为许多行业中的热门话题。与传统的本地渲染相比&#xff0c;云渲染具备许多独特的优势和劣势。本文将深入探讨云渲染的各项特点&#xff0c;帮助您全面了解这一技术&#xff0c;并为您提供有关云…

js+canvas实现劈腿关系图

【我愿称多对一 一对多关系为劈腿关系】 【仓库地址】gitgithub.com:yyccmmkk/rl.git 【显示所有线路细节】 【合并线路】 【合并同一个目标点线路】 【合并同一个出发点线路】 【数据结构】 原始数据只需要提供节点自身id 父点节id&#xff0c;劈腿关系图自动处理 [{id:z…

基于CSDN上海城市开发者社区第一次线下沙龙的筹备经验分享

引言 由于时间较为紧张、邹老师行程安排紧凑等因素影响&#xff0c;结合实际情况&#xff0c;改茶话会为聚餐&#xff0c;所以在举办线下沙龙的时候一定要根据实际情况来斟酌活动形式。本次活动是和哈士奇&#xff0c;哈哥一起筹备&#xff0c;也得到了哈哥的大力支持&#xff…

如何进行物联网开发可以快速完成产品研发?

物联网产品的研发与开发过程&#xff0c;是一个不断探索、创新、实践的过程&#xff0c;需要很长的周期&#xff0c;在这个过程中&#xff0c;项目团队往往需要投入大量的人力、物力和时间。同时&#xff0c;物联网产品研发过程中还涉及到大量的专业技术和知识&#xff0c;需要…

从git上拉取项目

目录 一、前期准备&#xff0c;获取git下载链接 二、idea下载 2.1.打开git下载界面 2.2.进入下载界面 2.3.下载前期配置 2.4.输入账号密码 2.5.下载完成后idea打开 2.6.下载完成后文件目录展示 三、命令行下载 3.1.打开所需要下载的项目路径 3.2.进入黑窗口 …

【算法系列之数组I】leetcode54.螺旋矩阵

704. 二分查找 力扣题目链接 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 输入: nums [-1,0,3,5,9,12], target 9…

【618备战巡礼】“三高”之第一高--如何打造高可用系统 | 京东云技术团队

前言 我们经常会说互联网“三高”&#xff0c;那什么是三高呢&#xff1f;我们常说的三高&#xff0c;高并发、高可用、高性能&#xff0c;这些技术是构建现代互联网应用程序所必需的。对于京东618备战来说&#xff0c;所有的中台系统服务&#xff0c;无疑都是围绕着三高来展开…

一文说清DC-DC BUCK电路(非常详细)

目录 摘要 BUCK原理 DC-DC芯片框图 自举电容 输出电感 输出电容和纹波 损耗 总结 摘要 DC-DC BUCK&#xff0c;是硬件工程师工作中使用频率非常高的电路&#xff0c;可以这么说&#xff0c;只要板子不是迷你型的&#xff0c;十有八九都有DC-DC。因此&#xff0c;对它的…

Win10安装mac虚拟机

参考文章 按照上面的参考文章进行了安装并完成了安装&#xff0c;结合安装过程中遇到的问题&#xff0c;进行一个总结。 要想在win10上安装mac虚拟机&#xff0c;需要准备三样东西&#xff1a; &#xff08;1&#xff09;虚拟机平台&#xff1a;用来装载mac虚拟机 &#xf…

【分布族谱】学生t分布,及其与正态分布、卡方分布的关系

文章目录 简介正态分布与卡方分布用scipy来验证三者关系 简介 1908年&#xff0c;戈塞特在酿酒厂工作&#xff0c;由于酒厂禁止员工发表酿酒相关的研究成果&#xff0c;所以他以Student为笔名发表了有关t分布的研究&#xff0c;故而这个著名的分布被命名为学生分布。 如果有两…

计算机基础--->操作系统(3)【内存管理】

文章目录 内存管理内存管理主要做什么&#xff1f;什么是内存碎片&#xff1f;常见内存管理方式虚拟内存什么是虚拟内存&#xff1f;虚拟内存的作用&#xff1f;没有虚拟内存的问题什么是虚拟地址和物理地址&#xff1f; 分段机制分页机制转址旁路缓存&#xff08;TLB、快表&am…

MySQL唯一约束失效深度剖析

详细情况&#xff1a; 业务反馈&#xff1a;“用int查出来有两条数据&#xff0c;char类型查出来只有一条数据 &#xff0c;这几个字段还是uk的 ”&#xff08;版本MySQL 5.7.25&#xff09; 表结构如下&#xff1a; CREATE TABLE test_table (id bigint(20) NOT NULL AUTO_IN…

构建方便残障人士使用的网站 web enhance the accessibility

文章目录 前言检测网站是否符合残障人士使用window版软件edge浏览器插件版 前端开发为残障人士的通用标准img标签a标签字体与颜色显示或隐藏的元素可交互的元素标记元素类别 总结 前言 网站的构建往往会忽略一群特殊的人群&#xff0c;在某些方便存在障碍的网民&#xff0c;比…