用 RDB 后端保存/恢复 Study¶
RDB后端可以实现持久化实验(即保存和恢复 study)以及访问 study 的历史记录。此外,我们还可以利用这个特点来进行分布式优化。具体描述见 分布式优化."
在本部分中,我们将尝试一个在本地环境下运行SQLite DB的简单例子。
注解
通过设置 DB 的 storage URL 参数,你也可以使用其他的 RDB 后端,比如 PostgreSQL 或者 MySQL.设置URL的方式参见 SQLAlchemy 的文档.
新建 Study¶
通过调用函数 create_study()
,我们可以创建一个持久化的 study.创建新 study 会自动初始化一个 SQLite 文件 example.db
.
import optuna
study_name = 'example-study' # Unique identifier of the study.
study = optuna.create_study(study_name=study_name, storage='sqlite:///example.db')
为了运行一个 study, 我们需要将目标函数传入 optimize()
方法并调用它。
def objective(trial):
x = trial.suggest_uniform('x', -10, 10)
return (x - 2) ** 2
study.optimize(objective, n_trials=3)
恢复 Study¶
为了恢复 study, 首先需要初始化一个 Study
对象, 并将该study 的名字 example-study
和 DB URL参数 sqlite:///example.db
传入其中。
study = optuna.create_study(study_name='example-study', storage='sqlite:///example.db', load_if_exists=True)
study.optimize(objective, n_trials=3)
实验历史记录¶
我们可以通过 Study
类来获得 study 和对应 trials的历史记录。比如,下面的语句可以获取 example-study
的所有 trials.
import optuna
study = optuna.create_study(study_name='example-study', storage='sqlite:///example.db', load_if_exists=True)
df = study.trials_dataframe(attrs=('number', 'value', 'params', 'state'))
trials_dataframe()
方法会返回一个如下的 pandas dataframe:
print(df)
输出:
number value params_x state
0 0 25.301959 -3.030105 COMPLETE
1 1 1.406223 0.814157 COMPLETE
2 2 44.010366 -4.634031 COMPLETE
3 3 55.872181 9.474770 COMPLETE
4 4 113.039223 -8.631991 COMPLETE
5 5 57.319570 9.570969 COMPLETE
Study
对象也有一些其他属性,比如 trials
, best_value
和 best_params
(见 第一个优化例子).
study.best_params # Get best parameters for the objective function.
study.best_value # Get best objective value.
study.best_trial # Get best trial's information.
study.trials # Get all trials' information.