メインコンテンツまでスキップ

CSVファイルからデータと実験をログに記録する

W&B Pythonライブラリを使ってCSVファイルをログに記録し、W&Bダッシュボードで可視化します。W&Bダッシュボードは、機械学習モデルの結果を整理し、可視化するための中心的な場所です。これは、W&Bに記録されていない以前の機械学習実験の情報が含まれているCSVファイルや、データセットが含まれているCSVファイルがある場合に特に便利です。

データセットのCSVファイルをインポートして記録する

CSVファイルの内容を再利用しやすくするために、W&Bアーティファクトを利用することをお勧めします。

  1. まず、CSVファイルをインポートします。次のコードスニペットで、iris.csvファイル名を自分のCSVファイル名に置き換えてください。
import wandb
import pandas as pd

# 新しいDataFrameにCSVを読み込む
new_iris_dataframe = pd.read_csv("iris.csv")
  1. CSVファイルをW&Bテーブルに変換して、W&Bダッシュボードを利用します。
# DataFrameをW&Bテーブルに変換
iris_table = wandb.Table(dataframe=new_iris_dataframe)
  1. 次に、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の章を参照してください。

  1. 最後に、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ワークスペースダッシュボードでリアルタイムの可視化が表示されます。以下の画像は、コードスニペットのデモンストレーションの出力を示しています。

CSVファイルが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ファイルに一般的に含まれる詳細には以下のものがあります。

実験モデル名ノートタグレイヤー数最終トレーニング精度最終検証精度トレーニング損失
実験 1mnist-300-レイヤートレーニングデータで過学習が起こった[最新]3000.990.90[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
実験 2mnist-250-レイヤー現在の最優れたモデル[プロダクション, 最高]2500.950.96[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
実験 3mnist-200-レイヤーベースラインモデルよりも悪い結果。デバッグが必要[デバッグ]2000.760.70[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
.....................
実験 Nmnist-X-レイヤーノート............[..., ...]

W&Bは、実験のCSVファイルをW&B Experiment Runに変換することができます。以下のコードスニペットとコードスクリプトは、実験のCSVファイルをインポートしてログに記録する方法を示しています:

  1. まず、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]
  1. 次に、新しい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()

Was this page helpful?👍👎