Hyperopt自动化调参工具实践-1

news2024/11/17 23:58:13

hyperopt

Hyperopt的任务是在一组可能的参数上找到标量值的最佳值,该标量值可能是随机的。

与许多优化包假定这些输入来自向量空间不同,Hyperopt是不同的,因为它鼓励使用者更详细地描述搜索空间。通过提供关于函数定义在哪里以及认为最佳值在哪里的更多信息,可以使Hyperopt中的算法更有效地搜索。

使用Hyperopt的方式是描述:

  • 要最小化的目标函数
  • 要搜索的空间
  • 用于存储搜索的所有点评估的数据库
  • 要使用的搜索算法

基础教程

在这个教程中,可以学习如何:

  1. 定义搜索空间
  2. 优化目标函数

本教程描述了如何使用HyperOpt优化超参数,而无需对HyperOpt中实现的任何算法具有数学理解。

# Import HyperOpt Library
from hyperopt import fmin, tpe, space_eval

声明一个要进行优化的目标函数。在本教程中,我们将优化一个名为"objective"的简单函数,这是一个简单的二次函数。

y = ( x − 3 ) 2 + 2 y = (x-3)^2 + 2 y=(x3)2+2

objective = lambda x: (x-3)**2 + 2

现在,让我们可视化这个目标函数。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-10, 10, 100)
y = objective(x)

fig = plt.figure()
plt.plot(x, y)
plt.show()

hnb9U.png

我们试图通过改变超参数 x x x 来优化这个目标函数。因此,将为 x x x 声明一个搜索空间。与搜索空间相关的函数是在 hyperopt.hp 中实现的,列表如下:

  • hp.randint(label, upper)hp.randint(label, low, high)
  • hp.uniform(label, low, high)
  • hp.loguniform(label, low, high)
  • hp.normal(label, mu, sigma)
  • hp.lognormal(label, mu, sigma)
  • hp.quniform(label, low, high, q)
  • hp.qloguniform(label, low, high, q)
  • hp.qnormal(label, mu, sigma, q)
  • hp.qlognormal(label, mu, sigma, q)
  • hp.choice(label, list)
  • hp.pchoice(label, p_list),其中 p_list 是概率和选项对的列表
  • hp.uniformint(label, low, high, q)hp.uniformint(label, low, high),因为当 q = 1.0 时,等同于 uniformint(label, low, high)

在本教程中,将使用最基本的 hp.uniform

# Define the search space of x between -10 and 10.
space = hp.uniform('x', -10, 10)

现在只剩下最后一步了。到目前为止,已经定义了一个目标函数,也为 x x x 定义了一个搜索空间。现在,可以在搜索空间 x x x 中搜索,并找到能够优化目标函数的 x x x 的值。HyperOpt 使用 fmin 来执行这个过程。

best = fmin(
    fn=objective,  # Objective Function to optimize
    space=space,  # Hyperparameter's Search Space
    algo=tpe.suggest,  # Optimization algorithm
    max_evals=1000  # Number of optimization attempts
)
print(best)
print(space_eval(space, best))
100%|██████████| 1000/1000 [00:04<00:00, 228.56trial/s, best loss: 2.000001036046408]
{'x': 3.0010178636491283}
3.0010178636491283

HyperOpt找到的最优 x x x 值约为3.0。这非常接近min y = ( x − 3 ) 2 + 2 y=(x-3)^2+2 y=(x3)2+2 的一个解。

总的代码如下

# Import HyperOpt Library
from hyperopt import fmin, tpe, space_eval

objective = lambda x: (x-3)**2 + 2

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-10, 10, 100)
y = objective(x)

fig = plt.figure()
plt.plot(x, y)
plt.show()

# Define the search space of x between -10 and 10.
space = hp.uniform('x', -10, 10)

best = fmin(
    fn=objective,  # Objective Function to optimize
    space=space,  # Hyperparameter's Search Space
    algo=tpe.suggest,  # Optimization algorithm
    max_evals=1000  # Number of optimization attempts
)
print(best)
print(space_eval(space, best))

多参数教程

在这个教程中,将学习如何:

  1. 使用多个超参数优化目标函数
  2. 定义不同类型的搜索空间
# Import HyperOpt Library
import numpy as np
from hyperopt import tpe, hp, fmin, space_eval

声明一个要进行优化的目标函数。与上次不同,这次将使用两个超参数 x x x y y y 来优化函数。

z = s i n x 2 + y 2 z = sin\sqrt{x^2 + y^2} z=sinx2+y2

def objective(params):
    x, y = params['x'], params['y']
    return np.sin(np.sqrt(x**2 + y**2))

现在尝试将其可视化。但与上次不同的是,这次有两个超参数,因此需要在三维空间中将它们可视化。

import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
x, y = np.meshgrid(x, y)

z = objective({'x': x, 'y': y})

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z, cmap=cm.coolwarm)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()

hngPp.png

同样,定义搜索空间。但这次,需要定义两个搜索空间( x , y x, y x,y),所以您将它们分别放在 dict() 中。

space = {
    'x': hp.uniform('x', -6, 6),
    'y': hp.uniform('y', -6, 6)
}
best = fmin(
    fn=objective, # Objective Function to optimize
    space=space, # Hyperparameter's Search Space
    algo=tpe.suggest, # Optimization algorithm (representative TPE)
    max_evals=1000 # Number of optimization attempts
)
print(best)
print(objective(best))
100%|██████████| 1000/1000 [00:07<00:00, 140.14trial/s, best loss: -0.9999998138498082]
{'x': 4.660020883316342, 'y': -0.7030201784219683}
-0.99999993408562725

定义不同类型的搜索空间

  • hp.randint(label, upper) 在区间 [0, upper) 中搜索整数。
  • hp.choice(label, list) 在列表中搜索元素。
def f(params):
    x1, x2 = params['x1'], params['x2']
    if x1 == 'james':
        return -1 * x2
    if x1 == 'max':
        return 2 * x2
    if x1 == 'wansoo':
        return -3 * x2

search_space = {
    'x1': hp.choice('x1', ['james', 'max', 'wansoo']),
    'x2': hp.randint('x2', -5, 5)
}

best = fmin(
    fn=f,
    space=search_space,
    algo=tpe.suggest,
    max_evals=100
)

print(best)
print(f(best))
100%|██████████| 100/100 [00:00<00:00, 396.61trial/s, best loss: -12.0]
{'x1': 2, 'x2': 4}

参考

  • https://github.com/hyperopt/hyperopt
  • https://hyperopt.github.io/hyperopt/
  • https://github.com/hyperopt/hyperopt-sklearn
  • 做模型搜索的科学:视觉架构的数百维超参数优化。
  • Hyperopt-Sklearn:sci kit-Learn 的自动超参数配置

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

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

相关文章

AI新工具(20240311) 国内免费使用Claude 3 Sonnet;Pika推出视频加音效功能

1: 国内免费使用Claude 3 Sonnet Claude 3现已登陆Amazon Bedrock&#xff0c;国内就能够免费使用&#xff0c;以下是网友整理的使用流程。 地址&#xff1a;https://lab.amazoncloud.cn/ 2: Pika Sound Effects Pika推出视频加音效功能&#xff0c;为视频创作带来声音定制…

举牌小人图生成小程序源码(修复版)

源码介绍&#xff1a; 举牌小人图生成小程序源码&#xff08;修复版&#xff09;无需服务器导入开发者工具即可运行&#xff0c;无需绑定合法域名&#xff0c;仅供学习交流 建议&#xff1a; 有能力者接入安全过滤机制&#xff0c;更完美&#xff0c;可以联系客服免费指导~ 源…

深度学习_VGG_3

目标 知道VGG网络结构的特点能够利用VGG完成图像分类 2014年&#xff0c;牛津大学计算机视觉组&#xff08;Visual Geometry Group&#xff09;和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络&#xff1a;VGGNet&#xff0c;并取得了ILSVRC2014比赛分类项目…

OKHttpRetrofit

完成一个get请求 1.导入依赖 implementation("com.squareup.okhttp3:okhttp:3.14.")2.开启viewBinding android.buildFeatures.viewBinding true 3.加网络权限 和 http明文请求允许配置文件 <?xml version"1.0" encoding"utf-8"?> &l…

【精选】30+Redis面试题整理(2024)附答案

目录 前言Redis基础项目有用到redis吗&#xff1f;你们项目为什么用redis?redis为什么这么快&#xff1f;了解Redis的线程模型吗&#xff1f;Redis优缺点?redis如何实现持久化&#xff1f;RDB持久化过程&#xff1f;AOF持久化过程&#xff1f;AOF持久化会出现阻塞吗&#xff…

[Angular 基础] - 表单:响应式表单

[Angular 基础] - 表单&#xff1a;响应式表单 之前的笔记&#xff1a; [Angular 基础] - routing 路由(下) [Angular 基础] - Observable [Angular 基础] - 表单&#xff1a;模板驱动表单 开始 其实这里的表单和之前 Template-Driven Forms 没差很多&#xff0c;不过 Tem…

vue-创建vue项目记录

安装node.js 先安装node.js的运行环境node.js的下载地址 安装后就可以使用npm命令 1、清除npm缓存&#xff1a;npm cache clean --force 2、禁用SSL&#xff1a;npm config set strict-ssl false 3、手动设置npm镜像源&#xff1a;npm config set registry https://registry.…

Python AI 之Stable-Diffusion-WebUI

Stable-Diffusion-WebUI简介 通过Gradio库&#xff0c;实现Stable Diffusion web 管理接口 Windows 11 安装Stable-Diffusion-WebUI 个人认为Stable-Diffusion-WebUI 官网提供的代码安装手册/自动安装不适合新手安装&#xff0c;我这边将一步步讲述我是如何搭建Python Conda…

centos 系统 yum 无法安装(换国内镜像地下)

centos 系统 yum 因为无法连接到国外的官网而无法安装&#xff0c;问题如下图&#xff1a; 更换阿里镜像&#xff0c;配置文件路径&#xff1a;/etc/yum.repos.d/CentOS-Base.repo&#xff08;如果目录有多余的文件可以移动到子目录&#xff0c;以免造成影响&#xff09; bas…

php CI框架异常报错通过钉钉自定义机器人发送

php CI框架异常报错通过钉钉自定义机器人发送 文章目录 php CI框架异常报错通过钉钉自定义机器人发送前言一、封装一个异常监测二、封装好钉钉信息发送总结 前言 我们在项目开发中&#xff0c;经常会遇到自己测试接口没问题&#xff0c;上线之后就会测出各种问题&#xff0c;主…

弹性盒子布局 Flexbox Layout

可以嵌套下去 1.display 属性 默认行排列 <style>.flex-item{ height: 20px;width: 10px;background-color: #f1f1f1;margin: 10px;}</style> </head> <body> <div class"flex-container"><div class"flex-item">1&l…

ajax异步访问及跨域处理

文章目录 1 认识同步和异步1.1 什么是同步交互1.2 什么是异步交互 2 AJAX介绍3 案例开发之验证用户名4 JSON格式4.1 响应普通文本数据4.2 JSON的介绍和应用4.3 JSON 与 JS 对象的关系4.4 JSON 和 JS 对象互转4.5 GSON工具类的使用 5 AJAX结合jQuery实现5.1 jQuery.ajax()的简单…

问题解决:NPM 安装 TypeScript出现“sill IdealTree buildDeps”

一、原因&#xff1a; 使用了其他镜像&#xff08;例如我使用了淘宝镜像 npm config set registry https://registry.npm.taobao.org/ &#xff09; 二、解决方法&#xff1a; 1.切换为原镜像 npm config set registry https://registry.npmjs.org 安装typescript npm i …

vscode设置setting.json

{ // vscode默认启用了根据文件类型自动设置tabsize的选项 "editor.detectIndentation": false, // 重新设定tabsize "editor.tabSize": 2, // #每次保存的时候自动格式化 // "editor.formatOnSave": true, // #每次保存的时候将代码按eslint格式…

java学习(集合)

一.集合(主要是单列集合和双列集合) 1.集合的框架体系&#xff08;两大类&#xff09; 2.collection接口是实现类的特点&#xff1a; 1)collection实现子类可以存放多个元素&#xff0c;每个元素可以是Object 2)有效Collection的实现类&#xff0c;可以存放重复的元素&#…

交叉编译x264 zlib ffmpeg以及OpenCV等 以及解决交叉编译OpenCV时ffmpeg始终为NO的问题

文章目录 环境编译流程nasm编译x264编译zlib编译libJPEG编译libPNG编译libtiff编译 FFmpeg编译OpenCV编译问题1解决方案 问题2解决方案 总结 环境 系统&#xff1a;Ubutu 18.04交叉编译链&#xff1a;gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu 我的路径/opt/toolch…

解释“RNN encode-decode”

“RNN encode-decode” 涉及使用循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;来执行编码和解码操作。这种结构常用于处理序列数据&#xff0c;例如自然语言处理、语音识别和时间序列预测等任务。 以下是 “RNN encode-decode” 的一般概念&a…

week07day01(窗口函数)

一. 窗口函数的定义和一些规范&#xff1a; 对数据进行分区&#xff0c;数据的样式是不改变的&#xff0c;但是会多添加一列。窗口函数只能写在"结果集"中。 二. 排名函数 1. rank() over() 例题&#xff1a;对每个人的消费金额进行排名&#xff1a; rank() …

基于Android的教学课程系统设计与开发

摘 要 移动应用已经成为人们生活必不可缺的一部分&#xff0c;大学生身为移动应用的最大用户群体&#xff0c;在生活学习娱乐各个方面都与移动应用有着紧密联系&#xff0c;然而针对大学生校园学习的移动应用却寥寥无几&#xff0c;因为不同的学校&#xff0c;甚至不同的院系&…

unity显示当前时间

1建立文本组件和一个空对象 2创建一个脚本并复制下面代码 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine;public class showtime: MonoBehaviour {public TextMeshProUGUI time;private void Update(){string currentTime Sy…