Tensor

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() vs np.random.rand()
    • torch.randint() vs np.random.randint()
    • torch.randn() vs np.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

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)
すべて1torch.ones((3,3))np.ones((3,3))
すべて0torch.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.Tarray.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の違い

項目PyTorchNumPy
GPU対応可能(CUDAを利用)不可
自動微分可能(requires_grad=True不可
メモリ管理view() はメモリ共有、reshape() はコピーの可能性ありreshape() はコピーが発生することが多い
行列演算torch.mm() を使用np.dot() を使用