目次
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() を使用 |