元のトレーニングスクリプト
val_acc) を最大化するハイパーパラメーターを検索することです。
Python スクリプトでは、train_one_epoch と evaluate_one_epoch の 2 つの関数を定義します。train_one_epoch 関数は 1 エポック分のトレーニングをシミュレートし、トレーニング精度と損失を返します。evaluate_one_epoch 関数は検証データセットでモデルを評価する処理をシミュレートし、検証精度と損失を返します。
また、学習率 (lr) 、バッチサイズ (batch_size) 、エポック数 (epochs) などのハイパーパラメーター値を含む設定辞書 (config) を定義します。この設定辞書の値がトレーニング処理を制御します。
次に、一般的なトレーニングループを模した main という関数を定義します。各エポックで、トレーニングデータセットと検証データセットに対する精度と損失を計算します。
このコードはモックのトレーニングスクリプトです。実際にモデルをトレーニングするのではなく、ランダムな精度と損失の値を生成してトレーニング処理をシミュレートします。このコードの目的は、トレーニングスクリプトに W&B を統合する方法を示すことです。
val_acc) を最大化する最適なハイパーパラメーターを検索します。
トレーニングスクリプトに W&B を追加する
- CLI
- Pythonスクリプトまたはノートブック
sweep の設定を記述した YAML 設定ファイルを作成します。この
設定ファイルには、sweep で探索するハイパーパラメーターを記述します。次の
例では、各 sweep の実行で、バッチサイズ (W&B sweep 設定の作成方法の詳細については、sweep 設定を定義するを参照してください。YAML ファイルでは、CLIで、sweep
agent が試行する run の最大数を設定します。これは省略可能です。この例では、
最大数を 5 に設定しています。続いて、これにより、sweep ID が返されます。sweep の初期化方法について詳しくは、
sweeps を初期化するを参照してください。sweep ID をコピーし、次のコードスニペット内の 詳細は、sweep ジョブを開始するを参照してください。
batch_size) 、エポック数 (epochs) 、および
学習率 (lr) のハイパーパラメーターを変化させます。program キーに Python スクリプト名を指定する必要があります。次に、コード例に以下を追加します。- W&B Python SDK (
wandb) と PyYAML (yaml) を import します。PyYAML は YAML 設定ファイルを読み込むために使用します。 - 設定ファイルを読み込みます。
wandb.init()を使用して、データの Sync とログを行うバックグラウンドプロセスを開始し、W&B Run を開始します。config オブジェクトを config パラメーターに渡します。- ハイパーパラメーターの値は、ハードコードされた値を使用する代わりに
wandb.Run.configから取得します。 - 最適化するメトリクスを
wandb.Run.log()でログします。設定で定義したメトリクスを必ずログする必要があります。この例の設定 dict (sweep_configuration) では、val_accの値を最大化するように sweep を定義しています。
wandb sweep コマンドで sweep を初期化します。YAML ファイル名を指定します。必要に応じて、プロジェクトフラグ (--project) にプロジェクト名も指定します。sweepID を置き換えて、
wandb agent
コマンドで sweep ジョブを開始します:sweep で W&B にメトリクスをログするsweep の設定と 以下は、メトリクスを W&B にログする誤った例です。sweep の設定で最適化対象になっているメトリクスは
wandb.Run.log() の両方で、定義した最適化対象のメトリクスをログする必要があります。たとえば、sweep の設定で最適化するメトリクスを val_acc と定義した場合は、val_acc も W&B にログする必要があります。メトリクスをログしないと、W&B は何を最適化すべきか判断できません。val_acc ですが、このコードでは validation キー配下のネストされた辞書内に val_acc をログしています。メトリクスはネストされた辞書内ではなく、直接ログする必要があります。