PyTorch Tensorの実用的ではないまとめ

記事の目的

 PyTorchは深層学習を実装する上で、今や最もスタンダードな手段の一つとなっています。このPyTorchにおいて、Tensorは中心的な役割を担います。そのため、PyTorchを理解するためには、まずTensorの初歩的な操作に慣れる必要があります。Tensor型の取り扱いは単純なものが多く、調査して使い方を知るだけなら、それほど困難ではないかと思います。
一方で、Tensor型に対する処理は何度も使うものが多いのですが、その都度調べるには種類が多すぎるように思います。そのため、この処理を覚える良いテキストがないかなあと感じていました。

 そのために、この記事では以下の事柄について解説します。

  1. 深層学習でTensor型がどこに登場するのか

  2. そのための変換は何か(雰囲気を覚える)

  3. Tensor型の使用に際して絶対に覚えておくべき2つの視点

 個人的な意見なのですが、特に初学者においては全てを覚えようとすることよりも、何を覚えないかということが非常に重要だと考えています。要点を抑えて、理解・暗記すべき箇所はしておき、それ以外はすぐに調べるようにしておく(そして、さっさと沢山kaggleなどに参加する)事が、大事になってくるのではないかと思います。
 なお、上記のような趣旨の記事のため、画像分類モデルの精度向上のためのtipsなどは一切含まれていません。あくまで、初学者やchat gptに頼ってコードを生成していたがよく分からなくなってきた人を対象に、結局tensorって何なのか雰囲気を大雑把に理解してもらう程度のイメージで書きました。

1. Tensor型はどこに登場するのか

 そもそも、tensorとはtorchモジュールにおいて提供されるオブジェクトの一つで、標準モジュールのListのようなものと最初は考えてもらって大丈夫です。
 次に、深層学習とtensorの関係について解説します。深層学習とは、非常に簡単に言えばtensorを入力として、望ましいtensorを出力するような関数(モデル)を得る学習のことです。このモデルのことを、ニューラルネットワーク(NN)と呼びます。勿論、tensorはただの数字の並びなので人間に認識できないため、tensorに落とし込んだりするところには工夫が必要ですが、実装の上では、まず上記tensorをtensorに変換する機構と捉えることが、まずは大事であると考えます。
 そのため、この節の答え、「どこでTensor型が登場するのか」は次の三点に着目すれば、まずは大丈夫です。

  1. ニューラルネットワークへの入力

  2. ニューラルネットワーク(モデルのパラメータ)

  3. ニューラルネットワークの出力

2. そのための変換は何か

 上で述べたどこでTensor型が登場するかの3パターンを、全ての状況において解説することは、非現実的です。例えば、今流行りのLLMでは、文字列を入力して文字列を出力しますが、これは文字列とtensor(埋め込みベクトルに変換)の相互の変換に加え、ニューラルネットワークはTransformerという特殊なモデルを使用します。また、画像を分類するならば、画像をtensorに変換し、ニューラルネットワークは畳み込みニューラルネットワーク(CNN)を利用するなどします。このように、様々なタスクで色々な変換が行われており、これらは各種理解してくしかありません。
 一方で、List型、NumPyのndaaray型との変換は、単純かつ基本的なので覚えておいてしまいましょう。

List -> Tensor

この処理は、最も単純なTensorの使い方です。(逆にあまり使うことは少ないのですが、、)これはtorch.tensorの引数に配列を指定するだけです。

import torch
output_tensor = torch.tensor([1, 2, 3])

ndarray -> Tensor

 この処理もあまり使いませんが、numpyのndarrayも基本的なので覚えておきましょう。
 これは、torch.from_numpyの引数にndarray型を指定するだけです。

import numpy as np
input_ndarray = np.array([1, 2, 3])
output_tensor = torch.from_numpy(input_ndarray)

Tensor -> ndarray

 この処理に関しては非常によく見かけます。tensorはあくまでtorchモジュールでしか利用できないので、可視化などの際には、もっと使いやすいNumPyのオブジェクトの方が便利な事が多いためです。
 下記のようにnumpy()メソッドを利用します。

input_tensor = torch.tensor([1, 2, 3])
output_ndarray = input_tensor.numpy()

3. 注意するべきこと

 さて、ここまでtensor型に変換するべきものとその方法について述べてきました。ここでは、tensor型を利用する際の注意点について簡単に書きたいと思います。注意すべき点は以下の二つです。

  1. tensorの所在地(GPUかCPUか)

  2. 自動微分機能

以下では、上の二点についてまとめたいと思います。
もし、今までの書き方が気に入ってくださった方がいらっしゃれば、是非読んでいただけると嬉しいですが、ここからの話はどの参考書・サイトにも書いてあります。なので、私のお小遣い稼ぎに付き合ってくださる物好きな方がいらっしゃれば程度でお読みください。

ここから先は

2,664字

¥ 150

この記事が気に入ったらチップで応援してみませんか?