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)