元のトレーニングスクリプト
val_acc) を最大化するハイパーパラメーターを見つけることです。
この Python スクリプトでは、train_one_epoch と evaluate_one_epoch という 2 つの関数を定義します。train_one_epoch 関数は 1 エポック分のトレーニングをシミュレートし、トレーニング精度と損失を返します。evaluate_one_epoch 関数は、検証データセットに対するモデルの評価をシミュレートし、検証精度と損失を返します。
また、学習率、バッチサイズ、エポック数などのハイパーパラメーター値を含む、config という名前の設定辞書を定義します。この設定辞書の値によって、トレーニングプロセスが制御されます。
次に、一般的なトレーニングループを模した main という関数を定義します。各エポックで、このスクリプトはトレーニングデータセットと検証データセットに対する精度と損失を計算します。
このコードはモックのトレーニングスクリプトです。実際にモデルをトレーニングするのではなく、ランダムな精度と損失の値を生成して、トレーニングプロセスをシミュレートします。このコードの目的は、トレーニングスクリプトに W&B を統合する方法を示すことです。
val_acc) を最大化する最適なハイパーパラメーターを見つけるために W&B を使用します。
トレーニングスクリプトに W&B を追加する
- CLI
- Python スクリプトまたはノートブック
sweep の設定を含む YAML 設定ファイルを作成します。この設定ファイルには、sweep で探索するハイパーパラメーターを記述します。次の例では、各 run で 詳細は、sweep 設定を定義するをご覧ください。YAML ファイルの トレーニングスクリプトを更新したら、CLI から 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()を使用して、最適化したいメトリクスをログします。設定で定義したメトリクスを必ずログする必要があります。この例の設定 dictionary (sweep_configuration) では、val_accの値を最大化するように sweep を定義しています。
-
wandb sweepコマンドを使用して sweep を初期化します。YAML ファイル名を指定します。必要に応じて、--projectフラグにプロジェクト名を設定します。これにより sweep ID が返されます。詳細は、Initialize sweeps を参照してください。 -
sweep ID をコピーし、次のコマンドの
[SWEEP-ID]を置き換えて、wandb agentコマンドで sweep ジョブを開始します。[YOUR-ENTITY]は W&B のエンティティ名に置き換えます。必要に応じて、--countを設定して、エージェントが試行する Runs の数を制限します (この例では 5 に設定しています) 。
sweep で W&B にメトリクスをログするsweep の設定と 以下は、メトリクスを W&B にログする誤った例です。sweep の設定で最適化対象になっているメトリクスは
wandb.Run.log() の両方で、定義した最適化対象のメトリクスをログする必要があります。たとえば、sweep の設定で最適化するメトリクスを val_acc と定義した場合は、val_acc も W&B にログする必要があります。メトリクスをログしないと、W&B は最適化を実行できません。val_acc ですが、このコードでは validation キー配下のネストされた辞書内に val_acc をログしています。メトリクスはネストされた辞書内ではなく、直接ログする必要があります。