> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-dbrian-docs-serverless-training-quickstart.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

> run.summary を使用して、best accuracy や minimum loss のような単一のサマリーメトリクスを W&B run でトラッキングし、カスタマイズします。

トレーニング中に時間とともに変化する値に加えて、モデルや前処理 step を要約する単一の値をトラッキングすることが重要になる場合がよくあります。この情報は、W\&B Run の `summary` 辞書にログします。Run の summary 辞書では、numpy 配列、PyTorch テンソル、TensorFlow テンソルを扱えます。値がこれらのタイプのいずれかである場合、テンソル全体をバイナリファイルとして永続化し、min、mean、variance、percentiles などの高レベルなメトリクスを summary オブジェクトに保存します。

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

次のコードスニペットは、W\&B にカスタム summary メトリクスを提供する方法を示しています。

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

with wandb.init(config=args) as run:
  best_accuracy = 0
  for epoch in range(1, args.epochs + 1):
      test_loss, test_accuracy = test()
      if test_accuracy > best_accuracy:
          run.summary["best_accuracy"] = test_accuracy
          best_accuracy = test_accuracy
```

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

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

<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 の **Overview** ページまたはプロジェクトの Runs 表で summary 値を表示します。

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

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-dbrian-docs-serverless-training-quickstart/iro0ihRDC8az5AgK/images/track/customize_summary.png?fit=max&auto=format&n=iro0ihRDC8az5AgK&q=85&s=211f661750bbaae1a5be6f1f6062b1fc" 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. Runs 表では、summary 値の名に対応する列で summary 値を確認できます。
  </Tab>

  <Tab title="W&B Public API">
    W\&B Public API を使用して、run の summary 値を取得できます。

    次のコード例は、W\&B Public API と pandas を使用して、特定の run にログされた summary 値を取得する方法の 1 つを示しています。

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

    entity = "<your-entity>"
    project = "<your-project>"
    run_name = "<your-run-name>" # summary 値を持つ 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()
    ```
  </Tab>
</Tabs>
