Wandb使用文档-Sweep(一)

定义sweep configuration

Wandb的sweep将探索超参数值的策略与计算超参数值的代码结合起来。该策略可以简单到尝试每个选项,也可以复杂到贝叶斯优化和超带(BOHB)。

以sweep 配置的形式定义你的策略。在a中指定配置:

如果使用Jupyter Notebook或Python脚本,则使用Python嵌套字典数据结构。

如果使用命令行(CLI),则为YAML文件。下面的代码片段演示了如何在Jupyter Notebook或Python脚本或YAML文件中定义sweep 配置的示例。配置键将在后面的小节中详细定义。

1、Python脚本或Jupyter Notebook:

在Jupyter Notebook或Python脚本中,在字典Python数据结构中定义扫描。

sweep_configuration = {
    'method': 'random',
    'name': 'sweep',
    'metric': {
        'goal': 'minimize', 
        'name': 'validation_loss'
        },
    'parameters': {
        'batch_size': {'values': [16, 32, 64]},
        'epochs': {'values': [5, 10, 15]},
        'lr': {'max': 0.1, 'min': 0.0001}
     }
}

2、YAML

在您的YAML中创建一个映射,其中键可以具有作为其值的进一步键。

program: train.py
method: bayes
metric:
  name: validation_loss
  goal: minimize
parameters:
  learning_rate:
    min: 0.0001
    max: 0.1
  optimizer:
    values: ["adam", "sgd"]

注意:确保您记录(wandb.log)在Python脚本或Jupyter Notebook中定义要优化的扫描的确切指标名称。启动W&B扫描代理程序后不能更改扫描配置。

例如,假设您希望W&B扫描在训练期间最大化验证准确性。在Python脚本中,您将验证精度存储在变量val_loss中。在你的YAML配置文件中,你这样定义:

metric:
  goal: maximize
  name: val_loss

您必须将Python脚本或Jupyter Notebook中的变量val_loss(在本例中)记录到W&B。W&B中,log的作用是上传这个字典类型文件当W&B的服务器上。

wandb.log({
        'val_loss': validation_loss
      })

sweep配置结构

sweep配置是嵌套的;键可以有进一步的键作为它们的值。顶层键在下面列出并简要描述,然后在下一节中详细介绍。

Top-Level Key Description
program

(必需)要运行的培训脚本。

method

​(必选)指定搜索策略。

parameters

(必选)指定搜索的参数范围。

name

扫描的名称,显示在W&B UI中。

description

扫描的文本描述。

metric

指定要优化的度量(仅用于某些搜索策略和停止条件)。

early_terminate

指定任何提前停止条件。

command

指定调用和传递参数到训练脚本的命令结构。

project

指定此扫描的项目。

entity

指定此扫描的实体。

run_cap 指定扫描的最大运行次数。

method:搜索类型方法

下面的列表描述了超参数搜索方法。使用方法指定搜索策略:

grid -遍历超参数值的每个组合。计算成本很高。

random -基于提供的分布,在每次迭代中选择一组随机的超参数值。

bayes -创建一个度量分数作为超参数函数的概率模型,并选择具有高概率改善度量的参数。贝叶斯超参数搜索方法采用高斯过程对参数与模型度量之间的关系进行建模,并选择参数优化改进概率。该策略要求指定metrickey。适用于少量连续参数,但伸缩性差。

一般使用random策略,例如YOLOv5中的默认超参数搜索策略配置为random。

使用方法

  • Random search 
    method: random
    

    Grid search

  • method: grid
    
  • Bayes search
method: bayes
metric:
  name: val_loss
  goal: minimize

注意:random bayes 搜索将永远运行—直到您从命令行、python脚本或UI中停止该过程。如果网格搜索在一个连续的搜索空间内搜索,它也会永远运行下去。

配置关键点

method

在sweep配置中使用方法键指定搜索策略。

method Description
grid

网格搜索遍历所有可能的参数值组合。

random

随机搜索在每次迭代中选择一组随机值。

bayes 我们的贝叶斯超参数搜索方法使用高斯过程来建模参数和模型度量之间的关系,并选择参数来优化改进的概率。此策略要求指定度量键。

parameters

描述sweep期间要探索的超参数。对于每个超参数,指定名称和可能的值作为常量列表(适用于任何方法),或指定随机或贝叶斯分布。

Values Description
values

指定此超参数的所有有效值。兼容网格。

value

指定此超参数的单个有效值。兼容网格。

distribution

从下面的分布表中选择一个分布。如果未指定,则如果设置了values,则默认为categorical,如果max和min设置为整数,则默认为int_uniform,如果max和min设置为浮点数,则默认为uniform,如果设置了value,则默认为constant。

probabilities

指定在使用随机时选择每个值元素的概率。

minmax

(intor float)最大值和最小值。如果是int,则为int_uniform -分布式超参数。如果为float,则用于均匀分布的超参数。

mu

(float)正态分布或对数正态分布超参数的均值参数。

sigma

(float)正态分布或对数正态分布超参数的标准差参数。

q

(float)量化超参数的量化步长。

parameters 在根级参数内嵌套其他参数。

Examples

single value 

parameter_name:
  value: 1.618

multiple values

parameter_name:
values:
  - 8
  - 6
  - 7
  - 5
  - 3
  - 0
  - 9

probabilities

parameter_name:
  values: [1, 2, 3, 4, 5]
  probabilities: [0.1, 0.2, 0.1, 0.25, 0.35]

distribution

parameter_name:
  distribution: normal
  mu: 100
  sigma: 10

nested 

optimizer:
    parameters:
        learning_rate:
            values: [0.01, 0.001]
        momentum:
            value: 0.9

 distribution

随机(random)或贝叶斯(bayes)方法必须设定变量,grid方法则不需要。

如果您选择随机(random)或贝叶斯(bayes)搜索方法,请指定如何分布值。

Value Description
constant

常数分布。必须指定值。

categorical

分类分布。必须指定值。

int_uniform

整数的离散均匀分布。必须将max和min指定为整数。

uniform

连续均匀分布。必须将最大值和最小值指定为浮点数。

q_uniform

量子化均匀分布。返回整数(X / q) * q,其中X是均匀的。Q默认为1。

log_uniform Log-uniform分布。返回一个介于exp(min)和exp(max)之间的值X,这样自然对数在min和max之间均匀分布。
log_uniform_values

Log-uniform分布。返回一个介于min和max之间的值X,使得log(X)均匀分布在log(min)和log(max)之间。

q_log_uniform

量化对数均匀性。返回整数(X / q) * q,其中X为log_uniform。Q默认为1。

q_log_uniform_values

量化对数均匀性。返回整数(X / q) * q,其中X为log_uniform_values。Q默认为1。

inv_log_uniform

逆对数均匀分布。返回X,其中log(1/X)均匀分布在min和max之间。

inv_log_uniform_values

逆对数均匀分布。返回X,其中log(1/X)均匀分布在log(1/max)和log(1/min)之间。

normal

正态分布。返回值为正态分布,均值为mu(默认0),标准差为sigma(默认1)。

q_normal

量子化正态分布。返回整数(X / q) * q,其中X为正常值。Q默认为1。

log_normal

对数正态分布。返回一个值X,使自然对数log(X)正态分布为均值mu(默认0)和标准差sigma(默认1)。

q_log_normal 量化对数正态分布。返回整数(X / q) * q,其中X为log_normal。Q默认为1。

以YOLOv5的sweep配置文件为例:

sweep.yaml

yolov5中distribution统一使用:uniform,连续均匀分布,最大值和最小值指定为浮点数。

# Hyperparameters for training
# To set range-
# Provide min and max values as:
#      parameter:
#
#         min: scalar
#         max: scalar
# OR
#
# Set a specific list of search space-
#     parameter:
#         values: [scalar1, scalar2, scalar3...]
#
# You can use grid, bayesian and hyperopt search strategy
# For more info on configuring sweeps visit - https://docs.wandb.ai/guides/sweeps/configuration

program: utils/loggers/wandb/sweep.py
method: random
metric:
  name: metrics/mAP_0.5
  goal: maximize

parameters:
  # hyperparameters: set either min, max range or values list
  data:
    value: "data/coco128.yaml"
  batch_size:
    values: [64]
  epochs:
    values: [10]

  lr0:
    distribution: uniform
    min: 1e-5
    max: 1e-1
  lrf:
    distribution: uniform
    min: 0.01
    max: 1.0
  momentum:
    distribution: uniform
    min: 0.6
    max: 0.98
  weight_decay:
    distribution: uniform
    min: 0.0
    max: 0.001
  warmup_epochs:
    distribution: uniform
    min: 0.0
    max: 5.0
  warmup_momentum:
    distribution: uniform
    min: 0.0
    max: 0.95
  warmup_bias_lr:
    distribution: uniform
    min: 0.0
    max: 0.2
  box:
    distribution: uniform
    min: 0.02
    max: 0.2
  cls:
    distribution: uniform
    min: 0.2
    max: 4.0
  cls_pw:
    distribution: uniform
    min: 0.5
    max: 2.0
  obj:
    distribution: uniform
    min: 0.2
    max: 4.0
  obj_pw:
    distribution: uniform
    min: 0.5
    max: 2.0
  iou_t:
    distribution: uniform
    min: 0.1
    max: 0.7
  anchor_t:
    distribution: uniform
    min: 2.0
    max: 8.0
  fl_gamma:
    distribution: uniform
    min: 0.0
    max: 0.1
  hsv_h:
    distribution: uniform
    min: 0.0
    max: 0.1
  hsv_s:
    distribution: uniform
    min: 0.0
    max: 0.9
  hsv_v:
    distribution: uniform
    min: 0.0
    max: 0.9
  degrees:
    distribution: uniform
    min: 0.0
    max: 45.0
  translate:
    distribution: uniform
    min: 0.0
    max: 0.9
  scale:
    distribution: uniform
    min: 0.0
    max: 0.9
  shear:
    distribution: uniform
    min: 0.0
    max: 10.0
  perspective:
    distribution: uniform
    min: 0.0
    max: 0.001
  flipud:
    distribution: uniform
    min: 0.0
    max: 1.0
  fliplr:
    distribution: uniform
    min: 0.0
    max: 1.0
  mosaic:
    distribution: uniform
    min: 0.0
    max: 1.0
  mixup:
    distribution: uniform
    min: 0.0
    max: 1.0
  copy_paste:
    distribution: uniform
    min: 0.0
    max: 1.0

猜你喜欢

转载自blog.csdn.net/qq_34424944/article/details/129423931