Wandb 使用法ドキュメント - スイープ (1)

スイープ構成を定義する

Wandb のスイープは、ハイパーパラメータ値を探索するための戦略と、ハイパーパラメータ値を計算するためのコードを組み合わせたものです。この戦略は、すべてのオプションを試すという単純なものもあれば、ベイジアン最適化とハイパーバンディング (BOHB) のような複雑なものもあります。

スイープ構成の形式で戦略を定義します。構成を次のように指定します。

Jupyter Notebook または Python スクリプトを使用する場合は、Python のネストされた辞書データ構造を使用します。

コマンド ライン (CLI) を使用する場合は YAML ファイル。以下のコード スニペットは、Jupyter Notebook、Python スクリプト、または YAML ファイルでスイープ構成を定義する方法の例を示しています。構成キーについては、後のサブセクションで詳しく定義します。

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"]

注: Python スクリプトまたは Jupyter Notebook で最適化するスキャンを定義する正確なメトリック名を必ずログ (wandb.log) に記録してください。W&B スキャン エージェントの開始後は、スキャン設定を変更できません。

たとえば、トレーニング中の検証精度を最大化するために W&B スキャンが必要だとします。Python スクリプトでは、検証精度を変数 val_loss に保存します。YAML 構成ファイルでは、以下を定義します。

metric:
  goal: maximize
  name: val_loss

Python スクリプトまたは Jupyter Notebook の変数 val_loss (この場合) を W&B に記録する必要があります。W&B では、この辞書型ファイルを W&B サーバーにアップロードするのがログの機能です。

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

スイープ構成構造

スイープ設定はネストされており、キーには値としてさらにキーを含めることができます。最上位のキーを以下にリストして簡単に説明し、次のセクションで詳しく説明します。

最上位のキー 説明
program

(必須) 実行するトレーニング スクリプト。

method

(必須) 検索戦略を指定します。

parameters

(必須) 検索するパラメータ範囲を指定します。

name

W&B UI に表示されるスキャンの名前。

description

スキャンのテキストによる説明。

metric

最適化するメトリックを指定します (特定の検索戦略および停止基準の場合のみ)。

early_terminate

早期停止条件を指定します。

command

パラメータを呼び出してトレーニング スクリプトに渡すためのコマンド構造を指定します。

project

このスキャンの項目を指定します。

entity

このスキャンのエンティティを指定します。

run_cap スキャン実行の最大数を指定します。

method:検索タイプの方法

以下のリストでは、ハイパーパラメータの検索方法を説明します。次のメソッドを使用して検索戦略を指定します。

グリッド - ハイパーパラメータ値の各組み合わせを繰り返します。計算コストが高い。

ランダム - 提供された分布に基づいて、反復ごとにハイパーパラメータ値のランダムなセットを選択します。

Bayes - ハイパーパラメータの関数としてメトリクス スコアの確率モデルを作成し、メトリクスを改善する可能性が高いパラメータを選択します。ベイジアン ハイパーパラメーター検索手法では、ガウス プロセスを使用してパラメーターとモデル メトリック間の関係をモデル化し、パラメーターを選択して改善の確率を最適化します。このポリシーでは、metrickey を指定する必要があります。少数の連続パラメータにはうまく機能しますが、スケーリングが不十分です。

一般的にはランダム戦略が使用されます。たとえば、YOLOv5 のデフォルトのハイパーパラメータ検索戦略はランダムとして構成されています。

手順

  • ランダム検索 
    method: random
    

    グリッド検索

  • method: grid
    
  • ベイズ探索
method: bayes
metric:
  name: val_loss
  goal: minimize

注:ランダム検索ベイズ検索は、コマンド ライン、Python スクリプト、または UI からプロセスを停止するまで、永久に実行されます。グリッド検索も、連続した検索スペースを検索する場合は永久に実行されます。

構成の重要なポイント

方法

スイープ設定でメソッド キーを使用して、検索戦略を指定します。

method 説明
grid

グリッド検索は、パラメーター値のすべての可能な組み合わせに対して反復されます。

random

ランダム検索では、反復ごとにランダムな値のセットが選択されます。

bayes 当社のベイジアン ハイパーパラメータ検索手法では、ガウス プロセスを使用してパラメータとモデル メトリクスの間の関係をモデル化し、改善の確率を最適化するパラメータを選択します。この戦略では、メトリック キーを指定する必要があります。

parameters

スイープ中に調査されるハイパーパラメータについて説明します。各ハイパーパラメータについて、名前と可能な値を定数のリストとして (任意のメソッドに対して) 指定するか、ランダム分布またはベイジアン分布を指定します。

価値観 説明
values

このハイパーパラメータに有効な値をすべて指定します。互換性のあるグリッド。

value

このハイパーパラメータに有効な値を 1 つ指定します。互換性のあるグリッド。

distribution

以下の分布表から分布を選択します。指定されていない場合、値が設定されている場合は categorical がデフォルトとなり、max と min が整数に設定されている場合は int_uniform、max と min が浮動小数点に設定されている場合は unique、value が定数に設定されている場合はデフォルトになります。

probabilities

ランダムが使用される場合に、各値要素が選択される確率を指定します。

min、 max

(float 内) 最大値と最小値。int の場合、int_uniform - 分散ハイパーパラメータ。float の場合、一様分布のハイパーパラメータ。

mu

(float) 正規分布または対数正規分布のハイパーパラメータの平均パラメータ。

sigma

(float) 正規分布または対数正規分布ハイパーパラメータの標準偏差パラメータ。

q

(float) 量子化ハイパーパラメータの量子化ステップ サイズ。

parameters ルートレベルのパラメータ内に他のパラメータをネストします。

単一の値 

parameter_name:
  value: 1.618

複数の値

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

確率

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

分布

parameter_name:
  distribution: normal
  mu: 100
  sigma: 10

入れ子になった 

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

 distribution

ランダム (ランダム) またはベイズ (ベイズ) メソッドでは変数を指定する必要がありますが、グリッド メソッドでは変数を指定する必要はありません。

ランダム (ランダム) またはベイジアン (ベイズ) 検索方法を選択した場合は、値を分散する方法を指定します。

価値 説明
constant

一定の分布。値を指定する必要があります。

categorical

カテゴリ分布。値を指定する必要があります。

int_uniform

整数の離散一様分布。max と min は整数として指定する必要があります。

uniform

継続的に均等に分配されます。最大値と最小値は浮動小数点数として指定する必要があります。

q_uniform

量子化された一様分布。整数 (X / q) * q を返します。ここで、X は一様です。Q のデフォルトは 1 です。

log_uniform 対数均一分布。自然対数が最小値と最大値の間で均等に分布するように、exp(min) と exp(max) の間の値 X を返します。
log_uniform_values

対数均一分布。log(X) が log(min) と log(max) の間に均一に分布するように、min と max の間の値 X を返します。

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

逆対数一様分布。log(1/X) が最小値と最大値の間で均一に分布する X を返します。

inv_log_uniform_values

逆対数一様分布。log(1/X) が log(1/max) と log(1/min) の間に均一に分布する X を返します。

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