本ページはプロモーション(PR)が含まれています
更新日: 2024/10/03
PyTorchの基本要素(Tensor、Autograd、nn、Dataset)のまとめについて
目次
はるか
最近、PyTorchに興味が出てきた。
ふゅか
いいじゃん!まずはテンソルから始めてみようよ。テンソルはPyTorchの基本だしね!
Tensor
はるか
テンソルって多次元配列のこと?
ふゅか
そうそう!GPUを使って高速計算もできるんだ!
テンソルは、PyTorchにおける基本的なデータ構造であり、多次元の数値配列を表現します。NumPyのndarrayに似ていますが、PyTorchのテンソルはGPUを利用して高速な計算が可能であり、深層学習に特化した機能があります。
多次元配列
テンソルは0次元(スカラー)から1次元(ベクトル)、2次元(行列)、さらに高次元のデータまで扱えます。
CPUとGPUのデバイス対応
テンソルはCPUとGPUの両方で操作可能です。.to(device)メソッドでデバイス間の移動が簡単に行えます。
データ型
浮動小数点数、整数、ブール値など、多様なデータ型をサポートしています。
例
import torch
# CPU上のテンソル
x = torch.Tensor([[1, 2], [3, 4]])
# GPU上のテンソル(CUDAが利用可能な場合)
if torch.cuda.is_available():
x = x.to('cuda')
Autograd(自動微分)
はるか
Autogradっていうのも気になる。
ふゅか
それは自動微分の仕組みだよ!勾配を自動で計算してくれるから、とっても便利なんだ。
勾配計算
requires_grad=Trueを設定すると、そのテンソルに対する操作が追跡され、backward()メソッドで勾配を計算できます。
例
import torch
# 勾配計算を有効にしたテンソル
x = torch.tensor(2.0, requires_grad=True)
y = x ** 5
y.backward()
print(x.grad) # dy/dx = 5x^4 ⇒ 5 * 2.0^4 = 80.
nnモジュール(ニューラルネットワーク)
torch.nnは、ニューラルネットワークを簡単に構築するためのモジュールです。
レイヤー
nn.Linear, nn.Conv2d, nn.LSTMなどの層を提供します。
損失関数
nn.CrossEntropyLoss, nn.MSELossなど、多様な損失関数が利用可能です。
モデル構築
nn.Moduleを継承して、自身のモデルを定義できます。
例
import torch.nn as nn
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.linear = nn.Linear(10, 1)
def forward(self, x):
return self.linear(x)
はるか
自分でモデルを定義できるのは面白い。
Optimizer(最適化アルゴリズム)
はるか
Optimizerについても教えて。
ふゅか
モデルのパラメータを更新するアルゴリズムだよ!
torch.optimは、モデルのパラメータを更新するための最適化アルゴリズムを提供します。
アルゴリズム
SGD, Adam, RMSpropなどが利用可能です。学習率などのハイパーパラメータも設定可能です。
例
import torch.optim as optim
model = SimpleModel()
optimizer = optim.SGD(model.parameters(), lr=0.01)
DataLoaderとDataset
データを効率的に読み込むためのツールが提供されています。
Dataset
データセットを扱うためのクラスで、__len__と__getitem__を実装します。
DataLoader
バッチ処理、シャッフル、マルチプロセッシングによるデータ読み込みをサポートします。
例
from torch.utils.data import Dataset, DataLoader
class CustomDataset(Dataset):
def __init__(self):
# データの初期化
pass
def __len__(self):
# データセットの長さを返す
return 100
def __getitem__(self, idx):
# インデックスidxのデータを返す
return data
dataset = CustomDataset()
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)


