超参搜索任务代码编写规范

超参搜索任务一般分为两个部分:一是搜索算法根据之前的评估结果生成超参数的组合;二是使用新生成的超参数进行训练,得到新的评估结果,将结果反馈给超参数搜索算法。两个过程不断迭代完成调优过程。

代码入参

用户需要在自己的代码的入口模块接受超参数作为输入。以 运行第一个超参搜索任务 中的“retinanet”代码为例,如用户需要搜索“momentum”和“max_iteration”两个超参,则需要在代码入口libs/configs/flags.py中包含这两个超参名。

flags = tf.compat.v1.flags
flags.DEFINE_float("momentum", 0.1, "momentum")
flags.DEFINE_integer("max_iteration", 6000, "max_iteration")

在运行指令中增加超参的配置,格式为:“–参数名=${trialParameters.参数名}”,以 运行第一个超参搜索任务 中的“retinanet”代码为例,运行指令如下:

python3 /workspace/algorithm/favorite/retinanet/v1/train.py \
    --dataset_dir=/workspace/dataset/favorite/rongyuan/v1 \
    --label_file=/workspace/dataset/favorite/rongyuan/v1/label.json \
    --pretrained_path=/workspace/model/favorite/resnet-50/v1 \
    --logs_dir=/workspace/outputs/hyper \
    --max_iteration=${trialParameters.max_iteration} \
    --momentum=${trialParameters.momentum} \
    --evaluate

返回评价指标

用户需要修改自己的代码以将评价指标返回给超参搜索算法。以 运行第一个超参搜索任务 中的“retinanet”代码为例,用户希望搜索“mean-iou”指标,则需要在train.py 文件中打印“mean-iou={metric_value}”。搜索任务会在日志中匹配“mean-iou=”来将评价指标返回给搜索算法。

print("{} mean-iou={}".format(
          datetime.now(timezone.utc).isoformat(), np.mean(iou_list)))