更新:2024/10/03
【PyTorch】CPUとGPU上にTensorを作成する方法について


ふゅか
Tensorって何だろう?名前は聞いたことあるけど、まだちょっとピンと来てないんだ~♪

はるか
Tensorは、簡単に言うと、数値データを格納するための多次元配列のこと。
目次
1. Tensorの基本的な作成方法
PyTorchでTensorの作成方法にはいくつかの種類があります。
1.1. 直接データからTensorを作成
まずは既存のデータからTensorを作る方法です。リストやNumPy配列を使ってTensorを作成できます。
import torch
# リストからTensorを作成
data = [[1, 2], [3, 4]]
tensor_from_list = torch.tensor(data)
print(tensor_from_list)
出力は次のようになります。

ふゅか
わあ、普通のリストからTensorができたんだね!すごく簡単だね☆
1.2. ゼロや一定値で初期化されたTensorを作成
Tensorをゼロや任意の値で初期化したい場合、torch.zeros
やtorch.ones
を使います。
# 全ての要素が0のTensorを作成
zeros_tensor = torch.zeros(3, 3)
print(zeros_tensor)
# 全ての要素が1のTensorを作成
ones_tensor = torch.ones(2, 4)
print(ones_tensor)
出力は次のようになります。
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
1.3. 任意の範囲でランダムな値を持つTensorを作成
ランダムな値で初期化されたTensorを作成することもできます。
# ランダムな値を持つTensorを作成
random_tensor = torch.rand(2, 3)
print(random_tensor)
出力例は次のようになります(毎回異なります)。
tensor([[0.2350, 0.8579, 0.8900],
[0.4317, 0.7254, 0.1296]])

ふゅか
なるほど、これでモデルの初期重みを簡単に用意できるんだね!便利~♪
2. NumPyとの相互変換
PyTorchのTensorはNumPyのndarray
と相互に変換できます。NumPyからTensorに変換したり、その逆も可能です。
2.1. NumPy配列をTensorに変換
NumPy配列をPyTorchのTensorに変換するには、torch.from_numpy
を使います。
import numpy as np
# NumPy配列からTensorを作成
np_array = np.array([[5, 6], [7, 8]])
tensor_from_numpy = torch.from_numpy(np_array)
print(tensor_from_numpy)
出力は次のようになります。
tensor([[5, 6],
[7, 8]], dtype=torch.int32)
2.2. TensorをNumPy配列に変換
逆に、TensorからNumPy配列に変換するには、.numpy()
メソッドを使います。
# TensorをNumPy配列に変換
tensor = torch.tensor([9, 10, 11])
np_array_from_tensor = tensor.numpy()
print(np_array_from_tensor)
出力は次のようになります。
[ 9 10 11]
3. GPU上でのTensor作成
PyTorchの最大の利点の一つは、TensorをGPUに転送して計算を高速化できる点です。TensorをGPU上で作成するには、device
引数を使用します。
# デフォルトではCPU上にTensorを作成
cpu_tensor = torch.tensor([1.0, 2.0])
print(cpu_tensor.device) # 出力: cpu
# GPU上にTensorを作成(CUDAが利用可能な場合)
if torch.cuda.is_available():
gpu_tensor = torch.tensor([1.0, 2.0], device='cuda')
print(gpu_tensor.device) # 出力: cuda:0

ふゅか
わぁ、GPUを使うと計算が速くなるって聞いたことあるけど、こんなに簡単に使えるんだね!かっこいい!

はるか
大規模なニューラルネットワークをトレーニングするときには、GPUの力を借りると処理が何倍も速くなる。
3.1. まとめ
TensorはPyTorchでの計算の基盤で、ゼロから作成する方法、ランダムに作成する方法、NumPy配列との相互変換など、非常に柔軟に扱えます。また、GPUを活用することで効率的に計算できるのも大きな魅力です。

ふゅか
これでTensorの基礎がよく分かったよ!次はTensorを使って何か面白いことしてみたいな~♪

はるか
次はTensorを使って簡単な計算や、ディープラーニングのモデルを作ってみるのもいいかも。