【PyTorch入門】Tensorの作成方法

1. 概要

PyTorchにはTensorというものが存在します。

TensorはPyTorchの基本となるデータ構造で、多次元配列を扱います。

PyTorchでディープラーニングを構築する際には、基本的にはTensorを使用します。

Tensorの操作方法はNumpyの操作方法と似ており、Numpyと同じような感覚で操作できます。

PyTorchのいろいろなTensorの作成方法を紹介します。


2. データからTensorの作成

データを格納したリストを用意して、そこからTensorを作成します。

# データからTensorを作成
data = [[1, 2], [3, 4]]

tensor_data = torch.tensor(data)

print('データ型と中身の確認')
print('データ型 : ', type(tensor_data))
print('データ : \n', tensor_data)
# Output
データ型と中身の確認
データ型 :  <class 'torch.Tensor'>
データ : 
 tensor([[1, 2],
        [3, 4]])



3. NumpyのndarrayからTensorの作成

Numpyのndarrayを用意し、Tensor型に変換することでTensorを作成します。

# ndarrayからTensorを作成
data = [[1, 2,], [3, 4]]

np_data = np.array(data)
print('変換前のデータ型と中身の確認')
print('データ型 : ', type(np_data))
print('データ : \n', np_data)

tensor_data = torch.from_numpy(np_data)
print('変換後のデータ型と中身の確認')
print('データ型 : ', type(tensor_data))
print('データ : \n', tensor_data)
# Output
変換前のデータ型と中身の確認
データ型 :  <class 'numpy.ndarray'>
データ : 
 [[1 2]
 [3 4]]

変換後のデータ型と中身の確認
データ型 :  <class 'torch.Tensor'>
データ : 
 tensor([[1, 2],
        [3, 4]], dtype=torch.int32)


4. 他のTensorから新しいTensorの作成

元のTensorを指定することで、同じ形状のTensorを作成することができます。

# 他のTensorから新しいTensorの作成
data = [[1, 2], [3, 4]]

tensor_data = torch.tensor(data, dtype=torch.int32)

print('元データのデータ型と中身の確認')
print('データ型 : ', type(tensor_data))
print('データ : \n', tensor_data)


# 指定したTensorと同じ形状のTensorを作成
# 中身はすべて1が入る
ones_data = torch.ones_like(tensor_data)

print('作成データのデータ型と中身の確認')
print('データ型 : ', type(ones_data))
print('データ : \n', ones_data)
# Output
元データのデータ型と中身の確認
データ型 :  <class 'torch.Tensor'>
データ : 
 tensor([[1, 2],
        [3, 4]], dtype=torch.int32)

作成データのデータ型と中身の確認
データ型 :  <class 'torch.Tensor'>
データ : 
 tensor([[1, 1],
        [1, 1]], dtype=torch.int32)



5. 形状を指定した新しいTensorの作成

作成するデータの形状を指定することで、Tensorを作成することができます。

# 形状を指定してTensorを作成
shape = (2, 3)

# ランダム値のTensor作成
random_tensor = torch.rand(shape)
print('データ型と中身の確認')
print('データ型 : ', type(random_tensor))
print('データ : \n', random_tensor)

# すべて1のTensor作成
ones_tensor = torch.ones(shape)
print('データ型と中身の確認')
print('データ型 : ', type(ones_tensor))
print('データ : \n', ones_tensor)

# すべて0のTensor作成
zeros_tensor = torch.zeros(shape)
print('データ型と中身の確認')
print('データ型 : ', type(zeros_tensor))
print('データ : \n', zeros_tensor)
# Output
データ型と中身の確認
データ型 :  <class 'torch.Tensor'>
データ : 
 tensor([[0.4534, 0.7046, 0.3841],
        [0.0558, 0.6755, 0.5836]])

データ型と中身の確認
データ型 :  <class 'torch.Tensor'>
データ : 
 tensor([[1., 1., 1.],
        [1., 1., 1.]])
        
データ型と中身の確認
データ型 :  <class 'torch.Tensor'>
データ : 
 tensor([[0., 0., 0.],
        [0., 0., 0.]])




6. 全体コード

最後に全体のコードをのせておきます。

# ライブラリの読み込み
import numpy as np
import torch


# データからTensorを作成
data = [[1, 2], [3, 4]]

tensor_data = torch.tensor(data)

print('データ型と中身の確認')
print('データ型 : ', type(tensor_data))
print('データ : \n', tensor_data)


# ndarrayからTensorを作成
data = [[1, 2,], [3, 4]]

np_data = np.array(data)
print('変換前のデータ型と中身の確認')
print('データ型 : ', type(np_data))
print('データ : \n', np_data)

tensor_data = torch.from_numpy(np_data)
print('変換後のデータ型と中身の確認')
print('データ型 : ', type(tensor_data))
print('データ : \n', tensor_data)


# 他のTensorから新しいTensorの作成
data = [[1, 2], [3, 4]]

tensor_data = torch.tensor(data, dtype=torch.int32)

print('元データのデータ型と中身の確認')
print('データ型 : ', type(tensor_data))
print('データ : \n', tensor_data)


# 指定したTensorと同じ形状のTensorを作成
# 中身はすべて1が入る
ones_data = torch.ones_like(tensor_data)

print('作成データのデータ型と中身の確認')
print('データ型 : ', type(ones_data))
print('データ : \n', ones_data)


# 形状を指定してTensorを作成
shape = (2, 3)

# ランダム値のTensor作成
random_tensor = torch.rand(shape)
print('データ型と中身の確認')
print('データ型 : ', type(random_tensor))
print('データ : \n', random_tensor)

# すべて1のTensor作成
ones_tensor = torch.ones(shape)
print('データ型と中身の確認')
print('データ型 : ', type(ones_tensor))
print('データ : \n', ones_tensor)

# すべて0のTensor作成
zeros_tensor = torch.zeros(shape)
print('元データのデータ型と中身の確認')
print('データ型 : ', type(zeros_tensor))
print('データ : \n', zeros_tensor)