目次
PyTorch Tensor の基本と重要機能まとめ
1. Tensor とは?
Tensor(テンソル)は、PyTorch で数値データを扱う基本的なデータ構造です。 NumPy の ndarray に似ていますが、GPU の活用 や 自動微分(Autograd) などの機能を持つのが特徴です。
2. Tensor の作成方法
PyTorch Tensor の重要ポイント
- NumPy 互換:
from_numpy()
や.numpy()
で相互変換できる - GPU での計算が可能:
tensor.to("cuda")
を使う - 自動微分対応:
requires_grad=True
を設定すると微分計算ができる - メモリ効率を考えた操作:
view()
を使うと無駄なメモリコピーを避けられる - データ型の変換:
.float()
,.int()
を使って型変換が可能 - 行列演算が豊富:
torch.mm()
,torch.matmul()
,tensor @ tensor
で計算できる - 統計処理が可能:
torch.mean()
,torch.std()
,torch.sum()
などが利用できる - 形状変更が容易:
reshape()
,view()
,squeeze()
,unsqueeze()
で調整可能 - ブロードキャスト対応:NumPy のように異なる形状の Tensor でも演算が可能
3. PyTorch と NumPy の違い
PyTorch と NumPy の主な違い
- PyTorch は GPU を活用できる(NumPy は CPU のみ)
view()
はメモリを共有し、reshape()
はコピーを作る可能性がある- 行列積は
torch.mm()
、NumPy ではnp.dot()
や@
を使う - PyTorch は自動微分が可能(
requires_grad=True
を設定) - 乱数生成の違い:
torch.rand()
vsnp.random.rand()
torch.randint()
vsnp.random.randint()
torch.randn()
vsnp.random.randn()
- リサイズの違い
tensor.view(shape)
,tensor.reshape(shape)
(PyTorch)array.reshape(shape)
,array.resize(shape)
(NumPy)
- データ型の違い
- PyTorch:
torch.float32
,torch.int64
- NumPy:
np.float32
,np.int64
- PyTorch:
4. PyTorch Tensor の基本操作
1. Tensor の作成
import torch
# 直接 Tensor を作成
tensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.arange(10) # 0~9 の整数
tensor3 = torch.zeros((5, 5)) # 5x5 のゼロ行列
tensor4 = torch.ones((3, 3)) # 3x3 の全て1の行列
tensor5 = torch.rand((2, 2)) # 2x2 のランダムな値
2. 形状変更
tensor = torch.arange(12).reshape(3, 4) # 3行4列に変形
tensor = tensor.view(2, 6) # 2行6列に変形(メモリ共有)
tensor = tensor.unsqueeze(0) # 次元追加
tensor = tensor.squeeze() # 余分な次元削除
3. 演算・行列演算
a = torch.tensor([1.0, 2.0, 3.0])
b = torch.tensor([4.0, 5.0, 6.0])
print(a + b) # 要素ごとの加算
print(a * b) # 要素ごとの乗算
print(torch.mm(a.view(3, 1), b.view(1, 3))) # 行列積
4. NumPy との相互変換
import numpy as np
# NumPy -> Tensor
np_array = np.array([1, 2, 3])
tensor = torch.from_numpy(np_array)
# Tensor -> NumPy
np_array2 = tensor.numpy()
5. 自動微分
※リンク先参照
6. 平均・統計処理
arr_tensor = torch.arange(10)
# 平均
mean_value = torch.mean(arr_tensor.float()) # int のままだとエラー
print(mean_value) # tensor(4.5000)
✅ よく使う PyTorch と NumPy の対応表
処理 | PyTorch (torch ) | NumPy (numpy ) |
---|---|---|
配列作成 | torch.tensor([1,2,3]) | np.array([1,2,3]) |
連続数列 | torch.arange(10) | np.arange(10) |
すべて1 | torch.ones((3,3)) | np.ones((3,3)) |
すべて0 | torch.zeros((3,3)) | np.zeros((3,3)) |
乱数 | torch.rand((3,3)) | np.random.rand(3,3) |
データ型変更 | tensor.float() | array.astype(np.float32) |
形状変更 | tensor.reshape(3,3) | array.reshape(3,3) |
メモリ共有リサイズ | tensor.view(3,3) | array.view() |
転置 | tensor.T | array.T |
行列積 | torch.mm(A, B) | np.dot(A, B) or A @ B |
最大値 | torch.max(tensor) | np.max(array) |
平均 | torch.mean(tensor.float()) | np.mean(array) |
NumPy 変換 | tensor.numpy() | – |
Tensor 変換 | torch.from_numpy(array) | – |
✅ まとめ
- TensorはPyTorchの基本データ構造 であり、NumPyの
ndarray
に似た使い方ができる。 - GPU対応 しており、高速な計算が可能。
- NumPyとの互換性が高い ため、
from_numpy()
や.numpy()
を使用して簡単に変換できる。 - 自動微分(Autograd)機能 を備え、機械学習やディープラーニングに活用できる。
- メモリ効率を考慮したデータ管理
view()
はメモリを共有reshape()
は場合によってコピーを作成するため注意が必要
- 行列演算 には
torch.mm()
を使用(NumPyではnp.dot()
) - 統計処理や形状変換が容易で、機械学習に適した設計
- GPUと自動微分の活用が重要 であり、計算負荷の高い処理に最適
✅ PyTorch Tensorの重要ポイント
🟢 NumPyとの相互変換
from_numpy()
や.numpy()
を使用して、PyTorch TensorとNumPy配列を簡単に相互変換できる。
🟢 GPUでの計算が可能
.to("cuda")
を使用すると、TensorをGPU上で計算できる。
🟢 自動微分が可能
requires_grad=True
を設定すると、微分計算が自動で行える。
🟢 メモリ効率を考慮
view()
を使用することで、無駄なメモリコピーを防げる。
✅ PyTorchとNumPyの違い
項目 | PyTorch | NumPy |
---|---|---|
GPU対応 | 可能(CUDAを利用) | 不可 |
自動微分 | 可能(requires_grad=True ) | 不可 |
メモリ管理 | view() はメモリ共有、reshape() はコピーの可能性あり | reshape() はコピーが発生することが多い |
行列演算 | torch.mm() を使用 | np.dot() を使用 |