Optuna的使用记录文档
前言
关于optuna的一些基础使用方法,在官方文档中已经介绍的非常详细:教程 — Optuna 2.7.0 文档,所以这里不再概述
本文档记录的原因很简单,只是笔者在工作时的使用过程中遇到了各种各样的问题,所以于此记录,主要用于自己复阅,如果能帮到他人那就更好了。
optuna是一个非常有用的优化器,在之后的学习过程中我应该也会经常去使用它。
并行运行
在此处有官方文档:简单的并行化 — Optuna 2.7.0 文档
代码不细讲,写一个脚本同时运行多个优化器就行,即创建多个study共用一个数据库。顺带一提,optuna的数据库支持选择很多,sqlite,mysql,postsql都可以使用。
创建多个study后,数据库就会创建一个study表,作为副键放在trial表中,用以分别不同的study的数据。当然了,如果你还要再分,可以写一个接口代码,在数据库中分模式以储存更多不同类型的优化数据。不过正常使用,我想直接一起塞到一个数据库中就可以了。
关于并行上限,不同的电脑性能和数据库类型差别都比较大,总的来说在20-30,这取决于你的数据库连接池情况。如果你不确定是否是连接池满了导致的并行数量上限,可以在数据库里用显示查看实时连接池情况。
关于optuna-Dashboard
optuna-dashboard用于optuna优化数据的可视化。
下面是一些心得:
- dashboaard可以根据数据库内的不同模式打开页面,也就是做到分类的效果
- dashboard的刷新速度在10s左右,也就是不需要手动刷新页面哦,并行运行也是这样的。
- 似乎在数据库的使用中,没有出现过死锁情况——优化器和dashboard都自带读写锁,不会冲突。
- dashboard不允许多开,会出现端口冲突,改端口也许是个办法,不过我没有测试过。
运行代码:
STORAGE = "postgresql://usrname:psaaword@localhost/da_name"
def run_dashboard(post):
subprocess.run([
"optuna-dashboard",
STORAGE,
"--port", str(port),
"--host", "127.0.0.1",
])
外接第三方优化器
保留随机取值
参考文档Ask-and-Tell 接口 — Optuna 2.7.0 文档
使用ask和tell接口,不再赘述。
完全外接第三方(只使用dashboard)
实现路径:只新建study和加入trial
- 新建study。如果没有就新建,有就载入。
study_name = xxx
storage_url = "postgresql://usrname:psaaword@localhost/da_name"
try:
study = optuna.load_study(study_name=study_name, storage=storage_url)
except:
study = optuna.create_study(study_name=study_name, storage=storage_url, direction="maximize")
- 定义变量类型。optuna规定载入的数据必须定义数据类型。我这里没有合适的代码,请按照自己的需求来。
def create_distributions(params_dict);
- 创建trial,载入变量,变量类型和优化值
trial = optuna.trial.create_trial(
params = params,
distributions = create_distributions(params),
value = value)
- 将trial加入study
study.add_trial(trial)
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果