KDOC 214: テンソルを確認する

この文書のステータス

  • 作成
    • 2024-08-08 貴島
  • レビュー
    • 2024-08-25 貴島

概要

機械学習に不慣れな人がまずやるべきは各ステップでのテンソルの把握、だと考えた。

テンソル

慣れない機械学習に取り組んでいる。学習がうまくできてない、ということが何回かあった。動いてはいるのだが、数値がおかしい。エラーが出るわけではないので、そもそもおかしいか判断するのが難しいし、直す箇所を見つけるのも一苦労だ。

知見のある人に聞いて解決するうち、よく引っかかるポイントが少しわかってきた。

よく間違っていたのは、テンソルだった。特にチャンネル数の異なる画像やTiff画像をテンソルにするとき正しく扱えていなかった。熟達者がいうままにテンソル形状や型、そして値を確認することで、誤りに気づけた。

違い

Webサービスを作るのと機械学習とでもっとも異なるのは、エラーが出るかだ。次点に、扱うデータ形式の広さと量が異なる。

  • データに起因する挙動の違いが起きやすい。データ形式を正しく理解していないと無意味な学習になる
  • データの多様性を正しく理解していないと特定のデータだけ処理がおかしくなる

コンピュータのバックグラウンドを持たない人が、それらをすぐ理解できるようになる近道はわからない。確かな方法は、1つずつ解像度の高い方法で確認して確かめることだ。

例えば、このようなスクリプトでテンソルを確認しよう。

def print_tensor_info(tensor: torch.Tensor, name: str) -> None:
    print(
        f"{name}\t- shape: {tensor.shape}\t, dtype: {tensor.dtype}\t, min: {tensor.min().item()}, max: {tensor.max().item()}"
    )

重要な点は、値の範囲を確認していることだ。これがとてもわかりやすく感じる。単純にテンソルをプリントすると、値の量が多すぎて見にくく、把握しにくい。

これを使って、データの「境目」でチェックを行って何が起きているかを調べよう。

  • 入力データ
  • 教師データ
  • 正規化した後のデータ
  • 予測テンソル
  • 活性化関数を適用したテンソル
  • 損失関数を適用したテンソル

型だけでなく値を具体的に知ることで、思い込みからくるミスを防ぎやすい。なによりテンソルがより身近になり、動きをイメージできるようになったように思える。

関連