Skip to main content
W&B Python SDK を使用して、sweep 定義を設定し、sweep を作成し、sweep エージェントを起動します。

Sweeps の sweep 設定例

"""
W&B Sweeps の sweep 設定例。

sweep_configuration は単一ネストの sweep 設定の例です。
sweep_configuration_nested は二重ネストの sweep 設定の例です。

以下を置き換えてください:
- 山括弧で囲まれた値を独自の値に
- 整数値、浮動小数点値、および値のリストを独自のハイパーパラメーター探索空間に
"""

sweep_configuration = {
    "program": "<program_name>",
    "name": "<sweep_name>",
    "method": "<sweep_method>",
    "metric": {
        "name": "<metric_name>",
        "goal": "<goal_type>"
        },
    "parameters": {
        "hyperparameter_1": {
            "search_constraint_1": 0.0001, 
            "search_constraint_2": 0.1
            },
        "hyperparameter_2": {
            "values": [16, 32, 64]
            },
        "hyperparameter_3": {
            "values": [5, 10, 15]
            },
        "hyperparameter_4": {
            "values": ["value_1", "value_2"]
            },
    },
}

## 二重ネストの sweep 設定例
sweep_configuration_nested = {
  "program": "<program_name>",
  "name": "<sweep_name>",
  "method": "<sweep_method>",
  "metric": {
    "name": "<metric_name>",
    "goal": "<goal_type>"
  },
  "parameters": {
    "hyperparameter_1": {
      "values": ["<value_1>", "<value_2>"]
    },
    "hyperparameter_2": {
      "values": [128, 256, 512]
    },
    "hyperparameter_3": {
      "values": [0.3, 0.4, 0.5]
    },
    "hyperparameter_4": {
      "value": 1
    },
    "hyperparameter_5": {
      "distribution": "<distribution_type>",
      "search_constraint_1": 0,
      "search_constraint_2": 0.1
    },
    "nested_category_1": {
      "parameters": {
        "nested_hyperparameter_1": {
          "distribution": "<distribution_type>",
          "search_constraint_1": 0.0,
          "search_constraint_2": 0.9
        },
        "nested_hyperparameter_2": {
          "values": [0.0001, 0.0005, 0.001]
        }
      }
    },
    "nested_category_2": {
      "parameters": {
        "nested_hyperparameter_1": {
          "distribution": "<distribution_type>",
          "search_constraint_1": 0.0,
          "search_constraint_2": 0.9
        },
        "nested_hyperparameter_2": {
          "values": [0.1, 0.2, 0.3]
        }
      }
    },
    "nested_category_3": {
      "parameters": {
        "nested_hyperparameter_1": {
          "distribution": "<distribution_type>",
          "search_constraint_1": 0.5,
          "search_constraint_2": 0.7
        },
        "nested_hyperparameter_2": {
          "values": [0.2, 0.3, 0.4]
        }
      }
    }
  }
}

sweep 設定を定義し、初期化して、Sweep を開始します

"""
sweep の設定を定義し、初期化して、W&B Sweep を開始します。

sweep_configuration は単一ネストの sweep 設定です。二重ネストの sweep 設定の例については sweep_config.py を参照してください。
"""
import wandb
import numpy as np
import random
import argparse

def train_one_epoch(epoch, lr, batch_size):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss

def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss

def main(args=None):
    # sweep エージェントから呼び出された場合、args は None になるため、
    # sweep 設定のプロジェクトを使用します
    project = args.project if args else None
    
    with wandb.init(project=project) as run:
        # `wandb.Run.config` オブジェクトからハイパーパラメーターの値を取得します
        lr = run.config["lr"]
        batch_size = run.config["batch_size"]
        epochs = run.config["epochs"]

        # トレーニングループを実行し、パフォーマンス値を W&B にログします
        for epoch in np.arange(1, epochs):
            train_acc, train_loss = train_one_epoch(epoch, lr, batch_size)
            val_acc, val_loss = evaluate_one_epoch(epoch)
            run.log(
                {
                    "epoch": epoch,
                    "train_acc": train_acc,
                    "train_loss": train_loss,
                    "val_acc": val_acc, # 最適化対象のメトリクス
                    "val_loss": val_loss,
                }
            )

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--project", type=str, default="sweep-example", help="W&B プロジェクト名")
    args = parser.parse_args()

    # sweep 設定の辞書を定義します
    sweep_configuration = {
        "method": "random",
        "name": "sweep",
        "metric": {
            "goal": "maximize",
            "name": "val_acc"
            },
        "parameters": {
            "batch_size": {"values": [16, 32, 64]},
            "epochs": {"values": [5, 10, 15]},
            "lr": {"max": 0.1, "min": 0.0001},
        },
    }

    # 設定の辞書を渡して sweep を初期化します
    sweep_id = wandb.sweep(sweep=sweep_configuration, project=args.project)

    # sweep ジョブを開始します
    wandb.agent(sweep_id, function=main, count=2)

Sweep を初期化する

"""
W&B Sweep を初期化します。

以下を置き換えてください:
- 山括弧で囲まれた値を独自の値に置き換えてください
- sweep_configuration を独自の sweep 設定辞書に置き換えてください。単一ネストおよび
    二重ネストの sweep 設定の例については sweep_config.py を参照してください。
"""

import wandb

# sweep 設定の例
sweep_configuration = {
    "method": "<sweep_method>",
    "name": "<sweep_name>",
    "metric": {
        "goal": "<goal>", 
        "name": "<metric_name>"
        },
    "parameters": {
        "hyperparameter_1": {
            "values": [16, 32, 64]
            },
        "hyperparameter_2": {
            "values": [5, 10, 15]
            },
        "hyperparameter_3": {
            "search_constraint_1": 0.1,
            "search_constraint_2": 0.0001
            },
    },
}

sweep_id = wandb.sweep(sweep=sweep_configuration, project="<project>")

sweep エージェントを実行するために sweep ジョブを開始する

"""
sweep エージェントを実行するための sweep ジョブを開始します。

以下を置き換えてください:
- 山括弧で囲まれた値を実際の値に置き換えてください
- sweep_id を sweep の ID に置き換えてください。この ID は sweep を初期化したときに返されます。
    sweep の初期化と sweep_id の取得方法の例については、sweep_initialize.py を参照してください。
- count を sweep で実行する run の数に置き換えてください
"""

import wandb

sweep_id, count = "<sweep_id>", 10
wandb.agent(sweep_id, count=count)