72
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CDLE youthAdvent Calendar 2022

Day 11

5行でカッコいい可視化を「WandB」入門

Last updated at Posted at 2022-12-10

🏁 目的

この記事の目的は、WandBとは何かを知り、基本的な使い方をマスターすることです。

この記事を参照するメリットは以下の点があります。

  • WandBの基本的な使い方を押さえられる
  • 普段のコードにWandBを導入できる

では早速、WandBを学んでいきましょう!

🤔WandBとは

WandBは機械学習のプラットフォームです。

そして、正式名称はWeights & Biasesと言います。

✨ WandBでできること

WandBでは、以下のようなことができます。

  • モデルの学習記録
  • モデル・データセットのバージョン管理
  • モデルの性能評価
  • 可視化

可視化では、Web上でのようなダッシュボードを作成できます。
スクリーンショット 2022-12-08 17.01.08.png
とてもカッコいいですね!

🔧WandBのセットアップ

WandBを使うためのセットアップについて、説明していきます。

WandBへの登録とAPIキーの取得

まずはWandBを使うために、https://wandb.ai/site で無料アカウントの登録をし、ログインしていきましょう。

次にAPIキーを設定画面で取得しましょう。
Danger Zone > API keys > New keyで作成できました。

素早いAPIキーの確認
APIキーの作成後は、https://wandb.ai/authorize でもAPIキーをコピーできます。

WandBのインストール

pipで自身の環境にWandBをインストールしましょう。

Open In Colab
手軽に試したい方は、Google Colabノートブックをご利用ください。

ノートブックの方

!pip install wandb

コマンドラインの方

pip install wandb

WandBへのログイン

WandBへログインしましょう。

ログインの際にはAPIキーを求められるので、先ほど作成したAPIキーを入力してください。

ノートブックの方

import wandb
wandb.login()

コマンドラインの方

wandb login

💻 WandBの使い方

準備が整ったので、WandBの基本的な使い方を説明します。

初期化

wandb.initで、WandBの実行を初期化し、記録を開始します。

import wandb
wandb.init(project="my-project")

プロジェクト名(my-project)は、好きな名前にしてください。

このプロジェクト名のもとに、記録が行われていきます。

ハイパーパラメータの保存

wandb.configで、保存したいハイパーパラメータを指定します。

wandb.config.epochs = 10

後の条件の比較に役立ちます。

学習時の評価値を記録

wandb.logで、正解率や損失のような、評価値を追跡・記録させます。

記録をわかりやすくするために、仮のループと値を入力します。

import random
offset = random.random() / 5
for epoch in range(2, wandb.config.epochs): # 保存したハイパーパラメータを使用
    accuracy = 1 - 2 ** -epoch - random.random() / epoch + offset
    loss = 2 ** -epoch + random.random() / epoch - offset
    
    # WandBへの記録
    wandb.log({"accuracy": accuracy, "loss": loss})
# WandBへ実行の終了を知らせる
wandb.finish()

また、wandb.finish()で、実行の終了を知らせています。

これによりノートブック形式では、学習の経過記録や概要を知らせてくれます。
スクリーンショット 2022-12-09 20.25.28.png

WandBのダッシュボードを確認してみましょう。
これらたったの5行を追加しただけで、次のような記録ができています!
スクリーンショット 2022-12-09 19.48.22.png

📣 通知の送信

WandBでは、メールやSlackに通知を送ることができます。

通知のタイミング
学習が完了したときや止まってしまった時、また自身でカスタマイズして、通知を送信できます。

設定

まず設定画面 > Alertsで通知の設定を行います。

今回はwandb.alert()のEmailをオンにして、自身で通知のタイミングを指定してみましょう。
スクリーンショット 2022-12-09 20.15.25.png

送信の実行

wandb.alert()を使って、通知の送信を行いましょう。
タイトルや本文を送ることができます。

import wandb
wandb.init(project="sample-alert")

accuracy = 0.9
# 通知の送信
wandb.alert(
    title="WandBからの通知", 
    text=f"今の正解率は {accuracy} です。"
)

wandb.finish()

メールボックスを確認してみましょう。
以下のような通知が届いていました!
スクリーンショット 2022-12-10 11.27.48.png

注意
wandb.alert()だけの実行では、うまく動作しなかったです...。

🎉 まとめ

最後に、これまでのコードを踏まえ、まとめて実行していきましょう。
少し書き方を変えている部分もあるので、新しい書き方として、参考にしていただければ幸いです。

import wandb
import random

total_runs = 5

# 5回実行する
for run in range(total_runs):
  # 初期化
  wandb.init(
      # プロジェクト名を設定
      project="total-project", 
      # 実行名をつける(これまでのように、指定しない場合は、自動で作成してくれます)
      name=f"run_{run}", 
      # ハイパーパラメータ等の情報を保存
      config={
      "learning_rate": 0.02,
      "architecture": "CNN",
      "dataset": "CIFAR-100",
      "epochs": 10,
      })
  
  # 学習ループ
  epochs = 10
  offset = random.random() / 5
  for epoch in range(2, epochs):
      accuracy = 1 - 2 ** -epoch - random.random() / epoch - offset
      loss = 2 ** -epoch + random.random() / epoch + offset
      
      # 評価値の記録
      wandb.log({"accuracy": accuracy, "loss": loss})

  # 通知の送信
  if run >= 4:
    wandb.alert(
        title='学習が完了しました。',
        text=f'5回目の正解率は {accuracy} でした。',
    )
  
  # 実行の終了を伝える
  wandb.finish()

WandBによって、次のような可視化が確認できます!
スクリーンショット 2022-12-10 14.24.07.png

WandBは数行加えるだけで、簡単に可視化できる便利なツールですね!
これを機に、ぜひ使ってみて下さい!

参考文献

読んでいただき、ありがとうございました!

72
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?