CSVファイルからデータと実験をログに記録する
W&B Pythonライブラリを使ってCSVファイルをログに記録し、W&Bダッシュボードで可視化します。W&Bダッシュボードは、機械学習モデルの結果を整理し、可視化するための中心的な場所です。これは、W&Bに記録されていない以前の機械学習実験の情報が含まれているCSVファイルや、データセットが含まれているCSVファイルがある場合に特に便利です。
データセットのCSVファイルをインポートして記録する
CSVファイルの内容を再利用しやすくするために、W&Bアーティファクトを利用することをお勧めします。
- まず、CSVファイルをインポートします。次のコードスニペットで、
iris.csv
ファイル名を自分のCSVファイル名に置き換えてください。
import wandb
import pandas as pd
# 新しいDataFrameにCSVを読み込む
new_iris_dataframe = pd.read_csv("iris.csv")
- CSVファイルをW&Bテーブルに変換して、W&Bダッシュボードを利用します。
# DataFrameをW&Bテーブルに変換
iris_table = wandb.Table(dataframe=new_iris_dataframe)
- 次に、W&B Artifactを作成し、テーブルをArtifactに追加します:
# 行の上限を200000に増やし、再利用しやすくするために、
# テーブルをArtifactに追加
iris_table_artifact = wandb.Artifact(
"iris_artifact",
type="dataset"
)
iris_table_artifact.add(iris_table, "iris_table")
# 生のcsvファイルをArtifact内にログして、データを保持する
iris_table_artifact.add_file("iris.csv")
W&B Artifactsに関する詳細は、Artifactsの章を参照してください。
- 最後に、
wandb.init
を使って新しいW&B Runを開始し、W&Bにトラッキングとログを行います:
# データをログするW&B runを開始する
run = wandb.init(project="tables-walkthrough")
# テーブルをログして可視化するためのrunに追加...
run.log({"iris": iris_table})
# そして、利用可能な行制限を増やすためにArtifactとしてログ!
run.log_artifact(iris_table_artifact)
wandb.init()
APIは、データをRunにログするために新しいバックグラウンドプロセスを生成し、デフォルトでwandb.aiにデータを同期します。W&Bワークスペースダッシュボードでリアルタイムの可視化が表示されます。以下の画像は、コードスニペットのデモンストレーションの出力を示しています。
上記のコードスニペットを含む完全なスクリプトは以下になります:
import wandb
import pandas as pd
# CSVを新しいDataFrameに読み込む
new_iris_dataframe = pd.read_csv("iris.csv")
# DataFrameをW&Bテーブルに変換する
iris_table = wandb.Table(dataframe=new_iris_dataframe)
# テーブルをアーティファクトに追加して、行の制限を200000に増やし、再利用しやすくする
iris_table_artifact = wandb.Artifact(
"iris_artifact",
type="dataset"
)
iris_table_artifact.add(iris_table, "iris_table")
# 生のcsvファイルをアーティファクトの中にログして、データを保護する
iris_table_artifact.add_file("iris.csv")
# W&Bのrunを開始してデータをログする
run = wandb.init(project="tables-walkthrough")
# ランでテーブルを可視化するためにログに記録する...
run.log({"iris": iris_table})
# そして、利用可能な行制限を増やすためにアーティファクトとしてログに記録する!
run.log_artifact(iris_table_artifact)
# ランを終了する(ノートブックで便利)
run.finish()
CSV形式の実験名をインポートしてログに記録する
場合によっては、実験の詳細がCSVファイルに記録されていることがあります。このようなCSVファイルに一般的に含まれる詳細には以下のものがあります。
- 実験ランの名前
- 最初のノート
- 実験を識別するためのタグ
- 実験に必要な構成(Sweeps Hyperparameter Tuningを活用できる利点付き)。
実験 | モデル名 | ノート | タグ | レイヤー数 | 最終トレーニング精度 | 最終検証精度 | トレーニング損失 |
---|---|---|---|---|---|---|---|
実験 1 | mnist-300-レイヤー | トレーニングデータで過学習が起こった | [最新] | 300 | 0.99 | 0.90 | [0.55, 0.45, 0.44, 0.42, 0.40, 0.39] |
実験 2 | mnist-250-レイヤー | 現在の最優れたモデル | [プロダクション, 最高] | 250 | 0.95 | 0.96 | [0.55, 0.45, 0.44, 0.42, 0.40, 0.39] |
実験 3 | mnist-200-レイヤー | ベースラインモデルよりも悪い結果。デバッグが必要 | [デバッグ] | 200 | 0.76 | 0.70 | [0.55, 0.45, 0.44, 0.42, 0.40, 0.39] |
... | ... | ... | ... | ... | ... | ... | |
実験 N | mnist-X-レイヤー | ノート | ... | ... | ... | ... | [..., ...] |
W&Bは、実験のCSVファイルをW&B Experiment Runに変換することができます。以下のコードスニペットとコードスクリプトは、実験のCSVファイルをインポートしてログに記録する方法を示しています:
- まず、CSVファイルを読み込んでPandas DataFrameに変換します。
"experiments.csv"
をあなたのCSVファイルの名前に置き換えてください。
import wandb
import pandas as pd
FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)
PROJECT_NAME = "Converted Experiments"
EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]
# Pandas DataFrameを扱いやすくするために書式を整える
for i, row in loaded_experiment_df.iterrows():
run_name = row[EXPERIMENT_NAME_COL]
notes = row[NOTES_COL]
tags = row[TAGS_COL]
config = {}
for config_col in CONFIG_COLS:
config[config_col] = row[config_col]
メトリクス = {}
for metric_col in METRIC_COLS:
metrics[metric_col] = row[metric_col]
summaries = {}
for summary_col in SUMMARY_COLS:
summaries[summary_col] = row[summary_col]
- 次に、新しいW&B Runを開始して、
wandb.init()
を使用してW&Bにトラッキングとログを行います。
run = wandb.init(
project=PROJECT_NAME,
name=run_name,
tags=tags,
notes=notes,
config=config
)
実験が実行されている間、メトリクスのすべてのインスタンスをログして、W&Bで表示、クエリ、分析できるようにすることができます。これを実現するためには、run.log()
コマンドを使用します。
run.log({key: val})
オプションで、runの結果を定義するための最終的なサマリーメトリクスをログに残すことができます。これを実現するためには、W&B define_metric
APIを使用します。この例では、run.summary.update()
を使って、サマリーメトリクスをrunに追加します。
run.summary.update(summaries)
詳細なサマリーメトリクスについては、ログサマリーメトリクスを参照してください。
以下は、上記のサンプルテーブルをW&B ダッシュボード に変換する完全な例スクリプトです。
FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)
PROJECT_NAME = "Converted Experiments"
EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]
for i, row in loaded_experiment_df.iterrows():
run_name = row[EXPERIMENT_NAME_COL]
notes = row[NOTES_COL]
tags = row[TAGS_COL]
config = {}
for config_col in CONFIG_COLS:
config[config_col] = row[config_col]
メトリクス = {}
for metric_col in METRIC_COLS:
metrics[metric_col] = row[metric_col]
サマリーズ = {}
for summary_col in SUMMARY_COLS:
summaries[summary_col] = row[summary_col]
run = wandb.init(project=PROJECT_NAME, name=run_name, \
tags=tags, notes=notes, config=config)
for key, val in metrics.items():
if isinstance(val, list):
for _val in val:
run.log({key: _val})
else:
run.log({key: val})
run.summary.update(summaries)
run.finish()