【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.zerostorch.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を使って簡単な計算や、ディープラーニングのモデルを作ってみるのもいいかも。