主要功能
急切的搜索 空格
最先进的技术 算法
容易的 并行化
代码 示例
定义 客观的 要优化的功能。 让我们最小化 (x)- 2)^2 使用建议超参数值 试验 对象。 这里,浮点值为 x个 建议来自 -10 到 10 创建一个 学习 对象并调用 优化 方法超过100 试验
进口optuna 定义目标(试验): x=试验.sugest_float('x',-10,10) 返回(x-2)**2 研究=optuna.create_study() 研究优化(目标,n试验=100) study.best_params#例如{'x':2.002108042}
将模型训练与 客观的 功能和返回精度 建议使用超参数 试验 对象 创建一个 学习 对象并执行优化
进口焊炬 进口optuna # 1. 定义要最大化的目标函数。 定义目标(试验): # 2. 使用试验对象建议超参数的值。 n_layers=试用.sugest_int('n_lawers',1,3) 层=[] in_features=28*28英寸 对于范围内的i(n层): out_features=试用.sugest_int(f'n_units_l{i}',4128) layers.append(torch.nn.Linear(in_features,out_feature)) layers.append(torch.nn.ReLU()) in_features=输出特性 layers.append(torch.nn.Linear(in_features,10)) layers.append(torch.nn.LogSoftmax(dim=1)) 型号=火炬编号。 顺序(*层)到(火炬装置(“pu”)) 。。。 返回精度 # 3. 创建一个研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究优化(目标,n试验=100)
将模型训练与 客观的 功能和返回精度 建议使用超参数 试验 对象 创建一个 学习 对象并执行优化
导入链接器 进口optuna # 1. 定义要最大化的目标函数。 定义目标(试验): # 2. 使用试验对象建议超参数的值。 n_layers=试用.sugest_int('n_lawers',1,3) 层=[] 对于范围内的i(n层): n_units=试用.sugest_int(f'n_units_l{i}',4128,log=真) layers.append(L.Linear(无,n_units)) 层.附加(F.relu) layers.append(L.Linear(无,10)) model=L.分类器(chainer.Sequential(*层)) 。。。 返回精度 # 3. 创建研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究.优化(目标,n_trials=100)
将模型训练与 客观的 功能和返回精度 建议使用超参数 试验 对象 创建一个 学习 对象并执行优化
导入张量流作为tf 进口optuna # 1. 定义要最大化的目标函数。 def目标(试验): # 2. 使用试验对象建议超参数的值。 n_layers=试用.sugest_int('n_lawers',1,3) 型号=tf.keras。 序列() model.add(tf.keras.layers.Flatten()) 对于范围内的i(n层): num_hidden=试用.sugest_int(f'n_units_l{i}',4128,log=True) model.add(tf.keras.layers.Dense(num_hidden,activation='relu')) model.add(tf.keras.layers.Dense(类别)) 。。。 返回精度 # 3. 创建研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究优化(目标,n试验=100)
将模型训练与 客观的 功能和返回精度 建议使用超参数 试验 对象 创建一个 学习 对象并执行优化
进口keras 进口optuna # 1. 定义要最大化的目标函数。 定义目标(试验): model=序列() # 2. 使用试验对象建议超参数的值。 模型.添加( Conv2D(filters=trial.sugest_categorical('filters',[32,64]), kernel_size=试用.suggest_categorical('kernel_size',[3,5]), stemps=试验.sugest_categorical('strides',[1,2]), activation=试验建议类别(‘activation’,['relu',‘linear’]), input_shape=输入形状) model.add(Flatten()) model.add(密度(CLASSES,activation='softmax')) #我们用抽样学习率编译我们的模型。 lr=试验.sugest_float('lr',1e-5,1e-1,log=True) model.compile(loss='sparse_categorical_crossentropy',optimizer=RMSprop(lr=lr),metrics=['accuracy']) 。。。 返回精度 # 3. 创建研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究.优化(目标,n_trials=100)
将模型训练与 客观的 功能和返回精度 建议使用超参数 试验 对象 创建一个 学习 对象并执行优化
将mxnet导入为mx 进口optuna # 1. 定义要最大化的目标函数。 定义目标(试验): # 2. 使用试验对象建议超参数的值。 n_layers=试用.sugest_int('n_lawers',1,3) 数据=mx.symbol。 变量(“数据”) 数据=mx.sym.flatten(数据=数据) 对于范围内的i(n层): num_hidden=试用.sugest_int(f'n_units_l{i}',4128,log=True) 数据=mx符号。 FullyConnected(数据=数据,num_hidden=num_hudden) 数据=mx.symbol。 激活(数据=数据,act_type=“relu”) 数据=mx.symbol。 FullyConnected(数据=数据,num_hidden=10) mlp=mx.symbol。 SoftmaxOutput(数据=数据,名称=“softmax”) 。。。 返回精度 # 3. 创建研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究优化(目标,n试验=100)
将模型训练与 客观的 功能和返回精度 使用 试验 对象 创建一个 学习 对象并执行优化
导入sklearn 进口optuna # 1. 定义要最大化的目标函数。 定义目标(试验): # 2. 使用试验对象建议超参数的值。 classifier_name=trial.sugest_categorical('classifier',['SVC','RandomForest']) 如果分类器名称==“SVC”: svc_c=试用.sugest_float('svc_c',1e-10,1e10,log=True) 分类器obj=sklearn.svm。 SVC(C=SVC_C,gamma='auto') 其他: rf_max_depth=试用.sugest_int('rf_max-depth',2,32,log=True) classifier_obj=sklearn.ensembly。 随机预测分类器(max_depth=rf_max_depth,n_estimators=10) 。。。 返回精度 # 3. 创建研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究优化(目标,n试验=100)
将模型训练与 客观的 功能和返回精度 建议使用超参数 试验 对象 创建一个 学习 对象并执行优化
将xgboost导入为xgb 导入optuna # 1. 定义要最大化的目标函数。 定义目标(试验): 。。。 # 2. 使用试验对象建议超参数的值。 参数={ “静音”:1, “objective”:“binary:logistic”, “booster”:trial.sugest_categorical(“booster“,[“gbtree”,“gblinear”,“dart”]), “lambda”:试用.sugest_float('lambda’,1e-8,1.0,log=True), “alpha”:试用.sugest_float('alpha',1e-8,1.0,log=True) } bst=xgb.列车(参数,列车) 。。。 返回精度 # 3. 创建研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究优化(目标,n试验=100)
将模型训练与 客观的 功能和返回精度 建议使用超参数 试验 对象 创建一个 学习 对象并执行优化
将lightgbm导入为lgb 进口optuna # 1. 定义要最大化的目标函数。 定义目标(试验): 。。。 # 2. 使用试验对象建议超参数的值。 参数={ “objective”:“binary”, “metric”:“binary_logloss”, “详细信息”:-1, 'boosting_type':'gbdt', “lambda_l1”:试用.sugest_float('lambda_l1',1e-8,10.0,log=True), “lambda_l2”:试用.sugest_float('lambda_ l2',1e-8,10.0,log=True), “num_leaves”:试用.sugest_int('num_leves',225), ‘feature_fraction’:试用.sugest_float(‘feature _ fraction',0.4,1.0), 'bagging_fraction':试用.sugest_float('bagging _ fraction',0.4,1.0), 'bagging_freq':试用.sugest_int('bagging _freq',1,7), 'min_child_samples':试验.suggest_int('min_child_samples',5100), } gbm=lgb.train(参数,dtrain) 。。。 返回精度 # 3. 创建研究对象并优化目标函数。 研究=optuna.create_study(direction='maximize') 研究优化(目标,n试验=100)
从optuna.visualization导入plot_intermediate_values 。。。 绘图中间值(研究)
安装
仪表板
%pip安装optuna-dashboard %optuna-仪表板 sqlite:///db.sqlite3
VS代码扩展
Jupyter实验室扩展
%pip安装jupyterlab jupyterlab-optuna
博客
视频
纸张
秋叶拓哉、三野昭太郎、延濑敏彦、大田武夫和小山正男。 2019 Optuna:KDD中的下一代超参数优化框架。
@进行中{optuna_2019, title={Optuna:下一代超参数优化框架}, author={秋叶、Takuya和Sano、Shotaro和Yanase、Toshihiko和Ohta、Takeru和Koyama、Masanori}, booktitle={第25届{ACM}{SIGKDD}知识发现和数据挖掘国际会议论文集}, 年份={2019} }