PyTorchとは?できること・インストール・基本の使い方をコード付きで解説

PyTorch(パイトーチ)は、Pythonでディープラーニング(ニューラルネットワーク)のモデルを作り、学習させ、動かすためのオープンソースのライブラリです。NumPyに似た「テンソル」の計算をGPUで高速に行えることと、勾配(微分)を自動で計算する仕組みが中心にあります。

この記事では、PyTorchの成り立ちと現在の運営、できること、インストール方法、基本の使い方を順に説明します。コードはPyTorch 2.14.1・Python 3.12.15(macOS)で実行し、実際の出力を載せています(2026年10月15日確認)。

PyTorchとは:概要と現在の運営

項目内容
読み方パイトーチ
種類Python向けのディープラーニング用ライブラリ(オープンソース)
インポート名import torch(パッケージ名もtorch)
最新の安定版2.14.1(PyPIで2026年9月30日公開、2026年10月15日確認)
対応Python3.10以上(公式は3.10〜3.14を推奨)
運営PyTorch Foundation(Linux Foundation傘下)

PyTorchの開発は2016年に、Lua言語のライブラリ「Torch」のコミュニティの開発者を中心に、Meta(当時のFacebook)の人員と資金の支援を受けて始まりました。2022年9月12日には、運営をMetaからLinux Foundation傘下のPyTorch Foundationへ移すことが発表されています。現在のPyTorch Foundationは、PyTorch本体に加えてvLLM、DeepSpeed、Ray、Safetensorsなどのプロジェクトも支援しています。

PyTorchで何ができるのか

  • テンソル計算:多次元配列(テンソル)の演算をCPU・GPUで行えます。NumPyの配列と相互に変換できます。
  • 自動微分(autograd):計算の過程を記録し、backward()を呼ぶだけで勾配を求めます。ニューラルネットワークの学習で必要な誤差逆伝播を自分で書く必要がありません。
  • ニューラルネットワークの部品:torch.nnに全結合層・畳み込み層・活性化関数・損失関数などがそろっています。
  • 最適化と学習ループ:torch.optimのSGDやAdamなどでパラメータを更新し、DataLoaderでデータをミニバッチに分けて流します。
  • 周辺ライブラリ:画像はtorchvision(最新0.29.1)、音声はtorchaudio(最新2.11.0)が公式に提供されています。

なお、テキスト処理用のtorchtextは開発が終了しており、公式リポジトリに「2024年4月の0.18が最後の安定版」と明記されています。古い解説記事でtorchtextを使っている場合は、そのまま真似しないよう注意してください。

インストール方法

インストールコマンドは、PyTorch公式サイトの「Start Locally」でOS・パッケージ管理ツール・計算環境(CPU/CUDA/ROCm)を選ぶと表示されます。最新の安定版はPython 3.10以上が必要です。

MacやCPUだけで使う場合は、pipで次のように入れられます。

pip3 install torch torchvision

NVIDIA製GPU(CUDA)で動かす場合は、Start Locallyで自分のCUDAバージョンを選び、表示された--index-urlつきのコマンドを使います。CUDAの対応バージョンはPyTorchのリリースごとに変わるため、古い記事のコマンドをそのまま使わず、必ず公式の表示を確認してください。インストールできたかは、バージョンを表示して確かめます。

基本の使い方1:テンソルを作って計算する

import torch
print(torch.__version__)
x = torch.tensor([[1., 2., 3.], [4., 5., 6.]])
print(x)
print(x.shape, x.dtype)
print(x * 2)
print(x @ x.T)

実行結果:

2.14.1
tensor([[1., 2., 3.],
        [4., 5., 6.]])
torch.Size([2, 3]) torch.float32
tensor([[ 2.,  4.,  6.],
        [ 8., 10., 12.]])
tensor([[14., 32.],
        [32., 77.]])

@は行列の積です。x.Tで転置した行列との積を計算しています。数値はデフォルトで32ビット浮動小数点数(float32)になります。

基本の使い方2:自動微分(autograd)

requires_grad=Trueを指定したテンソルは計算の履歴が記録され、backward()で勾配が求まります。y = x² + 2x + 1をx = 3で微分すると、2x + 2 = 8です。

import torch
x = torch.tensor(3.0, requires_grad=True)
y = x.pow(2) + 2 * x + 1
y.backward()
print(y.item())
print(x.grad.item())

実行結果:

16.0
8.0

基本の使い方3:GPU(CUDA・Apple SiliconのMPS)を使う

テンソルやモデルは.to(device)で計算する場所を移せます。NVIDIA製GPUならcuda、Apple Silicon搭載のMacならMPS(Metal Performance Shaders)が使えます。使えるものを順に確認するのが一般的な書き方です。

import torch
if torch.cuda.is_available():
    device = torch.device("cuda")
elif torch.backends.mps.is_available():
    device = torch.device("mps")
else:
    device = torch.device("cpu")
print(device)
t = torch.ones(2, 2).to(device)
print(t.device)

実行結果:

mps
mps:0

Apple SiliconのMacで実行したためmpsが選ばれました。GPUがない環境ではcpuと表示され、同じコードがそのまま動きます。

基本の使い方4:モデルを定義して学習させる

ディープラーニングの学習は「予測する→損失(誤差)を計算する→勾配を求める→パラメータを更新する」の繰り返しです。ここでは最小の例として、y = 3x + 2にノイズを加えたデータから、直線の傾きと切片を学習させます。

import torch
from torch import nn
from torch.utils.data import DataLoader, TensorDataset

torch.manual_seed(0)

# y = 3x + 2 にノイズを足したデータを100個つくる
X = torch.rand(100, 1) * 10
y = 3 * X + 2 + torch.randn(100, 1) * 0.5
loader = DataLoader(TensorDataset(X, y), batch_size=20, shuffle=True)

model = nn.Linear(1, 1)
loss_fn = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

for epoch in range(1, 201):
    for xb, yb in loader:
        pred = model(xb)
        loss = loss_fn(pred, yb)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    if epoch % 50 == 0:
        print(f"epoch {epoch}: loss={loss.item():.4f}")

w = model.weight.item()
b = model.bias.item()
print(f"学習した式: y = {w:.2f}x + {b:.2f}")

実行結果:

epoch 50: loss=0.2879
epoch 100: loss=0.3145
epoch 150: loss=0.1840
epoch 200: loss=0.2426
学習した式: y = 2.96x + 2.16

200エポック学習した結果、傾き2.96・切片2.16と、元の式(3と2)に近い値が得られました。ミニバッチごとに損失が上下するため、表示される損失は単調には減りません。学習ループの中身は次の5行が基本形です。

  1. pred = model(xb):予測する(順伝播)
  2. loss = loss_fn(pred, yb):損失を計算する
  3. optimizer.zero_grad():前回の勾配を消す
  4. loss.backward():勾配を求める
  5. optimizer.step():パラメータを更新する

基本の使い方5:ニューラルネットワークのクラスを作る・保存する

層を重ねたモデルは、nn.Moduleを継承したクラスとして定義します。4つの特徴量から3クラスを予測する、隠れ層1つのネットワークの例です。

import torch
from torch import nn

class SimpleNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.layers = nn.Sequential(
            nn.Linear(4, 16),
            nn.ReLU(),
            nn.Linear(16, 3),
        )

    def forward(self, x):
        return self.layers(x)

model = SimpleNN()
print(model)
print(sum(p.numel() for p in model.parameters()))
torch.manual_seed(0)
out = model(torch.randn(5, 4))
print(out.shape)
torch.save(model.state_dict(), "model.pth")
model2 = SimpleNN()
model2.load_state_dict(torch.load("model.pth", weights_only=True))
model2.eval()
print("読み込み完了")

実行結果:

SimpleNN(
  (layers): Sequential(
    (0): Linear(in_features=4, out_features=16, bias=True)
    (1): ReLU()
    (2): Linear(in_features=16, out_features=3, bias=True)
  )
)
131
torch.Size([5, 3])
読み込み完了

パラメータ数131は、(4×16+16)+(16×3+3)で計算できます。保存はstate_dict()(パラメータだけの辞書)をtorch.saveで書き出し、読み込むときは同じクラスのモデルを作ってからload_state_dictで戻すのが推奨される方法です。推論に使う前にはmodel.eval()を呼びます。

TensorFlowとの違い・PyTorchが向いている人

PyTorchは計算を実行しながら計算の流れ(グラフ)を組み立てるため、通常のPythonのif文やfor文をモデルの中にそのまま書け、途中の値をprintやデバッガで確認できます。研究用のコードや、論文の実装を動かして試したい人、Pythonの書き方のまま機械学習を学びたい人に向いています。TensorFlow/Kerasも広く使われているため、勤務先や使いたいモデルがどちらで公開されているかで選ぶのが現実的です。

PyTorchを学ぶ前提として、Pythonの基本文法とNumPyの配列操作に慣れておくと理解が早くなります。プログラミングの基礎から始めたい方は、テックジムの無料講座から試せます。

機械学習の基礎の関連記事

よくある質問

Q. PyTorchの読み方は?

パイトーチと読みます。Pythonでのインポート名はtorchです。

Q. PyTorchは無料で使えますか?

はい。オープンソースのライブラリで、pipでインストールして無料で使えます。現在はLinux Foundation傘下のPyTorch Foundationが運営しています。

Q. GPUがなくてもPyTorchは使えますか?

使えます。CPUだけでも動き、小さなモデルの学習や学習済みモデルの推論なら十分試せます。Apple Silicon搭載のMacではMPSでGPUを使うこともできます。

Q. PyTorchに必要なPythonのバージョンは?

2026年10月15日時点の最新安定版(2.14.1)はPython 3.10以上が必要で、公式サイトは3.10〜3.14を推奨しています。

あわせて読みたい

学習の順序はPython学習のロードマップ、標準で使える機能の一覧はPython標準ライブラリのモジュール一覧にまとめています。

機械学習の全体像は機械学習とは?仕組み・種類・できることを簡単に解説|Pythonで動く例つきにまとめています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら