参数调整¶
与训练和评估模型相似,LibCity向研究者提供了一个脚本hyper_tune.py来自动搜索超参数。这个脚本是基于第三方开源库Ray Tune的实现。
与run_model.py相同,hyper_tune.py也提供了一系列命令行参数,允许使用者来调整实验配置。除了run_model.py提供的命令行指令参数,hyper_tune.py也支持了下列独有参数。
space_file:指定超参数搜索空间的配置文件,默认为None。scheduler:将在ray.tune.run中使用的试验调度器, 默认值为FIFO,目前,LibCity 支持FIFO,ASHA,MedianStoppingRule。(试验是从搜索空间中采样一次接着进行训练和评估。)search_alg:将被用在ray.tune.run的搜索算法,默认值为BasicSearch。目前, LibCity支持BasicSearch,BayesOptSearch,HyperOpt。 LibCity 将使用损失函数作为搜索指标。num_samples:从超参数空间的取样次数,默认值为5。max_concurrent:同时运行试验的最大数,默认值为1。cpu_per_trial:每次试验所分配的cpu数量,默认值为1。gpu_per_trial:每次试验所分配的gpu数量,默认值为1。task, model, dataset, space_file这三个参数必须在命令行中指定。例如,你可以按照下方格式运行超参数调整:python hyper_tune.py --task [task_name] --model=[model_name] --dataset=[dataset_name] --space_file=[file_name]
空间文件¶
空间文件应该使用JSON文件格式储存。空间文件的内容是一个字典,其键为参数名,其值为空间描述变量。
空间描述变量由空间类型和该类型对应的约束参数组成。支持的空间类型及其对应的约束参数如下:
uniform:取样空间是均匀分布的实数空间。lower: 均匀分布的下限。upper:均匀分布的上限。
randn:取样空间是正态分布的实数空间。mean: 正态分布的数学期望。sd: 正态分布的标准差。
randint:取样空间是均匀分布的整数空间。lower: 均匀分布的下限(inclusive)。upper: 均匀分布的上限 (exclusive)。
choice: 搜索空间是一组离散的分类变量的集合,超参数将从集合中随机选择。list: 离散的分类变量的集合。
grid_search: 搜索空间是离散的分类变量。参数选择将采取网格搜索的方法,遍历所有可能的组合。list: 离散的分类变量的集合。
一个空间文件的例子如下:
{
"beta": {
"type": "uniform",
"lower": 0.1,
"upper": 10.0
},
"learning_rate": {
"type": "choice",
"list": [0.01, 0.005, 0.001]
}
}