0Pricing
Learn AI with Python · レッスン

PyTorchのテンソルとAutograd

torch.Tensor、requires_grad、backward()、勾配計算、テンソル演算について学習します。

「PyTorchのテンソルとAutograd」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

PyTorchとは

PyTorchは、GPUアクセラレーションと自動微分に対応した多次元配列であるテンソルを中心に構築された、深層学習フレームワークです。まず習得すべき二つの柱は、テンソルとautogradです。

pip install torch

import torch

テンソルの作成

テンソルはNumPy配列に似ていますが、GPU上に配置でき、勾配を追跡できます。torch.tensorで作成します。テンソルにはshapeとdtypeがあります。

x = torch.tensor([1.0, 2.0, 3.0])
print(x.shape)   # torch.Size([3])
print(x.dtype)   # torch.float32

テンソルの演算

テンソルは要素ごとの数学演算、行列積、形状変更に対応しています。演算はベクトル化され、ハードウェア上で高速に実行されます。これは、あらゆるニューラルネットワークの計算基盤です。

a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
b = torch.tensor([[5.0, 6.0], [7.0, 8.0]])
print(a + b)
print(a @ b)  # matrix multiply

requires_grad:勾配の追跡

勾配を計算するには、requires_grad=Trueを指定してテンソルを作成します。するとPyTorchはそのテンソルに対するすべての演算を記録し、後で微分できる計算グラフを構築します。

x = torch.tensor([2.0, 3.0], requires_grad=True)
print(x.requires_grad)  # True

計算の構築

勾配を追跡するテンソルに演算を適用して、スカラー値の出力を作成します。ここでは各要素を二乗して合計し、xに関して微分できる単一の値を求めます。

x = torch.tensor([2.0, 3.0], requires_grad=True)
y = x.pow(2).sum()   # y = x0^2 + x1^2
print(y)             # tensor(13., grad_fn=...)

backward()の呼び出し

スカラー値に対して.backward()を呼び出すと、誤差逆伝播によって勾配を計算できます。PyTorchは記録されたグラフを逆向きにたどり、微分値を自動的に埋めます。

y.backward()

.gradの読み取り

backward()の実行後、各入力テンソルは.gradに勾配を保持します。y = sum(x^2)の場合、微分は2xなので、勾配は[4, 6]になります。

print(x.grad)  # tensor([4., 6.])

勾配は蓄積される

注意が必要な点として、複数回のbackward()呼び出しをまたいで勾配は加算されます。トレーニングループでは、各ステップでx.grad.zero_()またはオプティマイザーのzero_grad()を使って勾配をゼロにする必要があります。

x.grad.zero_()  # reset before the next backward()

推論でのtorch.no_grad()

推論中は勾配が不要であり、勾配を追跡するとメモリを無駄に消費します。予測コードをwith torch.no_grad():で囲むと、グラフの構築を無効にして処理を高速化できます。

with torch.no_grad():
    preds = x.pow(2).sum()
    print(preds.requires_grad)  # False

detach()で勾配の流れを止める

.detach()はデータを共有しつつ、計算グラフから切り離されたテンソルを返します。ログ出力やネットワークの一部を固定する場合など、値を使いながら、その値を通じて勾配が逆方向に流れないようにするときに使用します。

z = x.detach()
print(z.requires_grad)  # False

Autogradが重要な理由

Autogradによって深層学習が実用的になります。順方向の計算を定義するだけで、PyTorchが誤差逆伝播に必要な勾配を自動的に導出します。作成するすべてのトレーニングループは、requires_grad、backward、.gradを基盤としています。

理解度チェック

autogradの理解度を確認しましょう。

復習:テンソルとAutograd

torch.tensorでテンソルを作成し、requires_grad=Trueで勾配の追跡を有効にしました。出力を計算して.backward()を実行し、.gradから微分値を読み取りました。また、勾配が蓄積されること、推論でtorch.no_grad()を使うこと、.detach()で勾配の流れを切断することを学びました。

よくある質問

「PyTorchのテンソルとAutograd」レッスンは無料ですか?

はい。「PyTorchのテンソルとAutograd」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「PyTorchのテンソルとAutograd」で何を学びますか?

torch.Tensor、requires_grad、backward()、勾配計算、テンソル演算について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「PyTorchのテンソルとAutograd」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. PyTorchのテンソルとAutograd
  2. カスタムデータセットとDataLoader
  3. PyTorchでCNNを構築・学習する
  4. YOLOv8による物体検出
← Learn AI with Pythonに戻る