> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-locadex-parallel-t9n-main-cs60c8p4o6ik99tylxgp3.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# サマリー メトリクスをログする

> run.summary を使用して、最良の accuracy や最小の損失など、W&B Run の個別のサマリー メトリクスをトラッキングおよびカスタマイズします。

トレーニング中に時間とともに変化する値に加えて、モデルや前処理ステップを要約する値をトラッキングすることも重要です。この情報は run の `summary` 属性に保存します。run の `summary` 属性では、NumPy 配列、PyTorch テンソル、TensorFlow テンソルを扱うことができます。W\&B は NumPy 配列、PyTorch テンソル、TensorFlow テンソルをバイナリ file に永続化します。

`wandb.Run.log()` で最後にログした値は、run のサマリー辞書として自動的に設定されます。サマリー メトリクス辞書を変更すると、以前の値は失われます。

アクティブな run の実行中、または run の完了後にサマリー メトリクスをログできます。

<Tabs>
  <Tab title="run の実行中">
    次のコード スニペットは、カスタムのサマリー メトリクスを W\&B に設定する方法を示しています。

    ```python theme={null}
    import wandb
    import random

    # run を記録する project
    project = "summary-demo"
    entity = "<your-entity>" # W&B entity 名に置き換えます

    # ハイパーパラメーターを含む辞書
    config = {
        'epochs' : 10,
        'lr' : 0.01
    }

    with wandb.init(entity=entity, project=project, config=config) as run:
        offset = random.random() / 5
        print(f"lr: {config['lr']}")

        # トレーニング run をシミュレートします
        for epoch in range(2, config['epochs']):
            acc = 1 - 2**-config['epochs'] - random.random() / config['epochs'] - offset
            loss = 2**-config['epochs'] + random.random() / config['epochs'] + offset
            print(f"epoch={config['epochs']}, accuracy={acc}, loss={loss}")
            run.log({"accuracy": acc, "loss": loss})

            if epoch % 5 == 0:
                run.summary["best_accuracy"] = acc
                run.summary["best_loss"] = loss
    ```
  </Tab>

  <Tab title="run の完了後">
    トレーニングの完了後に、既存の W\&B Run の `summary` 属性を更新できます。`summary` 属性を更新するには、[W\&B Public API](/ja/models/ref/python/public-api/) を使用します。

    ```python theme={null}
    api = wandb.Api()
    run = api.run("entity/project/run_id")
    run.summary["tensor"] = np.random.random(1000)
    run.summary.update()
    ```
  </Tab>
</Tabs>

次の画像は、上記のコード スニペットをコピーして実行した場合のサマリー メトリクスの例を示しています。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-locadex-parallel-t9n-main-cs60c8p4o6ik99tylxgp3/20vnqCDVE2AUovXc/images/track/summary_demo.png?fit=max&auto=format&n=20vnqCDVE2AUovXc&q=85&s=31df3149d7ea7521ccc8e5090025d02f" alt="Run のサマリー" width="3288" height="3148" data-path="images/track/summary_demo.png" />
</Frame>

<div id="customize-summary-metrics">
  ## サマリーメトリクスをカスタマイズする
</div>

カスタムサマリーメトリクスを使用すると、トレーニング中の最良のstepにおけるモデル性能を `run.summary` に記録できます。たとえば、最終値ではなく、精度の最大値や損失の最小値を記録したい場合があります。

デフォルトでは、summary は履歴の最後の値を使用します。サマリーメトリクスをカスタマイズするには、`define_metric` に `summary` 引数を渡します。指定できる値は次のとおりです。

* `"min"`
* `"max"`
* `"mean"`
* `"best"`
* `"last"`
* `"none"`

`"best"` を使用できるのは、省略可能な `objective` 引数も `"minimize"` または `"maximize"` に設定した場合のみです。

次の例では、損失と精度の最小値および最大値を summary に追加します。

```python theme={null}
import wandb
import random

random.seed(1)

with wandb.init() as run:
    # 損失のsummaryの最小値と最大値
    run.define_metric("loss", summary="min")
    run.define_metric("loss", summary="max")

    # accuracyのsummaryの最小値と最大値
    run.define_metric("acc", summary="min")
    run.define_metric("acc", summary="max")

    for i in range(10):
        log_dict = {
            "loss": random.uniform(0, 1 / (i + 1)),
            "acc": random.uniform(1 / (i + 1), 1),
        }
        run.log(log_dict)
```

<div id="view-summary-metrics">
  ## サマリー メトリクスを表示する
</div>

アクティブな run 中、既存の run、またはローカル ファイルシステムから、W\&B App で run のサマリーにアクセスできます。

<Tabs>
  <Tab title="Run Overview">
    1. W\&B App にアクセスします。
    2. project のサイドバーから **Workspace** タブを選択します。
    3. サマリー値をログした run をクリックします。デフォルトで **Overview** タブが表示された Run page が開きます。
    4. **Summary** セクションでサマリー値を確認します。

    次の画像は、上記のコード スニペットをコピーして実行した場合に、**Overview** タブに表示されるサマリー メトリクスの例です。

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-locadex-parallel-t9n-main-cs60c8p4o6ik99tylxgp3/kh8Z3NjWQ0CDfbX3/images/track/customize_summary.png?fit=max&auto=format&n=kh8Z3NjWQ0CDfbX3&q=85&s=76e27a9e065e17f220c5f5d7001d0c77" alt="Run overview" width="2416" height="2694" data-path="images/track/customize_summary.png" />
    </Frame>
  </Tab>

  <Tab title="Run Table">
    1. W\&B App にアクセスします。
    2. **Runs** タブを選択します。
    3. run テーブルでは、サマリー値の名前に対応する列でサマリー値を確認できます。
  </Tab>

  <Tab title="run 中">
    アクティブな run 中に run のサマリー値にアクセスするには、`wandb.Run.summary` を使用します。この属性はキーと値のペアからなる辞書を返します。

    次の例では、run のサマリーにアクセスします。`"<my-project>"` を W\&B の project 名に置き換えてください。

    ```python theme={null}
    import wandb

    with wandb.init(project="<my-project>", config=config) as run:
      run.log({"accuracy": 0.9, "loss": 0.1})

      print(run.summary)  # サマリー辞書を出力します
    ```
  </Tab>

  <Tab title="既存の run">
    `wandb.Api.Run.summary` プロパティを使用して、W\&B Public API からサマリー メトリクスにアクセスします。

    次のコード例は、W\&B Public API と pandas を使用して、特定の run にログされたサマリー値を取得する方法の一例です。

    ```python theme={null}
    import wandb
    import pandas

    entity = "<your-entity>"
    project = "<your-project>"
    run_name = "<your-run-name>" # サマリー値を持つ run の名前

    all_runs = []

    for run in api.runs(f"{entity}/{project_name}"):
        print("Fetching details for run: ", run.id, run.name)
        run_data = {
                  "id": run.id,
                  "name": run.name,
                  "url": run.url,
                  "state": run.state,
                  "tags": run.tags,
                  "config": run.config,
                  "created_at": run.created_at,
                  "system_metrics": run.system_metrics,
                  "summary": run.summary,
                  "project": run.project,
                  "entity": run.entity,
                  "user": run.user,
                  "path": run.path,
                  "notes": run.notes,
                  "read_only": run.read_only,
                  "history_keys": run.history_keys,
                  "metadata": run.metadata,
              }
        all_runs.append(run_data)
      
    # DataFrame に変換する  
    df = pd.DataFrame(all_runs)

    # 列名（run）に基づいて行を取得し、辞書に変換する
    df[df['name']==run_name].summary.reset_index(drop=True).to_dict()
    ```

    project 内の複数の run のサマリー メトリクスにアクセスするには、`api.runs()` が返す run を反復処理します。

    ```python theme={null}
    import wandb

    api = wandb.Api()
    runs = api.runs("<entity>/<project>")

    for run in runs:
        print(f"Run name: {run.name}")
        print(f"Run ID: {run.id}")
        print(f"Run summary: {dict(run.summary)}")
        print("----------")
    ```

    次の JSON オブジェクトは、run サマリーの例を示しています。

    ```shell theme={null}
    Run name: clean-oath-11
    Run ID: mt2dasoz
    Run summary: {'_runtime': 3, '_step': 1000, '_timestamp': 1778541534.834642, '_wandb.runtime': 3, 'train/epoch_ndx': 1000, 'train/train_loss': 0.25498124957084656}

    Run name: zesty-snowball-7
    Run ID: qne08r7u
    Run summary: {'_runtime': 3, '_step': 1000, '_timestamp': 1776714833.636171, '_wandb.runtime': 3, 'train/epoch_ndx': 1000, 'train/train_loss': 0.24914199113845825}
    ```
  </Tab>

  <Tab title="ローカル ファイルシステム">
    W\&B は、run ディレクトリ内の `wandb-summary.json` file に run のサマリー値を保存します。サマリー値をローカルで読み取るには、`wandb-summary.json` file を開きます。

    デフォルトでは、W\&B は run ディレクトリを次の場所に保存します: `./wandb/run-<timestamp>-<run_id>`。
  </Tab>
</Tabs>
