定义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 | 指定在使用随机时选择每个值元素的概率。 |
min , max | (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