ニューラルネットワークの初期化に役立つ!PyTorch `random_` メソッドの使い方
このメソッドには、以下の引数があります。
- dtype: 生成されるテンソルのデータ型 (デフォルトはテンソルの現在のデータ型)
- to: ランダムな値の上限 (デフォルトは1)
- from: ランダムな値の下限 (デフォルトは0)
例
import torch
# 0から1までのランダムな値で満たされたTensorを作成します。
x = torch.randn(3, 2)
x.random_()
print(x)
# -1から1までのランダムな値で満たされたTensorを作成します。
y = torch.randn(3, 2)
y.random_(-1, 1)
print(y)
出力
tensor([[0.3713, 0.0769],
[0.5549, 0.7584],
[0.9901, 0.8743]])
tensor([[-0.8204, -0.2858],
[-0.9575, 0.4912],
[0.7847, 0.9260]])
random_
メソッドは、以下の方法で使用できます。
- 既存のTensorを変更する
既存のTensorをランダムな値で置き換えることができます。これは、ニューラルネットワークの重みをランダムに初期化する場合などに役立ちます。 - 新しいTensorを作成する
上記の例のように、新しいTensorを作成してランダムな値で初期化することができます。
注意点
random_
メソッドは、inplace 操作です。つまり、メソッドを呼び出すと、元のTensorが直接変更されます。random_
メソッドは、元のTensorの値を 置き換えます。元の値を保持したい場合は、clone()
メソッドを使用してコピーを作成してから、random_
メソッドを適用する必要があります。
torch.Tensor.random_
メソッドは、PyTorch テンソルをランダムな値で埋めるために使用できる便利なツールです。ニューラルネットワークの初期化やランダムなデータ生成など、さまざまなタスクで役立ちます。
新しいテンソルを作成してランダムな値で初期化する
import torch
# 0から1までのランダムな値で満たされたTensorを作成します。
x = torch.random(3, 2)
print(x)
# -1から1までのランダムな値で満たされたTensorを作成します。
y = torch.random(3, 2, -1, 1)
print(y)
既存のテンソルを変更する
import torch
# ランダムな値で初期化されたTensorを作成します。
x = torch.randn(3, 2)
# Tensorを-1から1までのランダムな値で置き換えます。
x.random_(-1, 1)
print(x)
import torch
# ランダムな値で初期化されたTensorを作成します。
x = torch.randn(3, 2)
# Tensorのコピーを作成します。
x_copy = x.clone()
# コピーを-1から1までのランダムな値で置き換えます。
x_copy.random_(-1, 1)
# コピーの内容を元のTensorにコピーします。
x.copy_(x_copy)
print(x)
torch.rand() を使用する
torch.rand()
関数は、指定されたサイズのテンソルを、0から1までの浮動小数点数のランダムな値で生成します。
import torch
# 0から1までのランダムな値で満たされたTensorを作成します。
x = torch.rand(3, 2)
print(x)
torch.randn() を使用する
torch.randn()
関数は、指定されたサイズのテンソルを、標準正規分布に従うランダムな値で生成します。
import torch
# 標準正規分布に従うランダムな値で満たされたTensorを作成します。
x = torch.randn(3, 2)
print(x)
torch.uniform() を使用する
torch.uniform()
関数は、指定された範囲内のランダムな値でテンソルを生成します。
import torch
# -1から1までのランダムな値で満たされたTensorを作成します。
x = torch.uniform(-1, 1, (3, 2))
print(x)
NumPy を使用する
NumPy を使用してランダムな値の配列を作成し、それを PyTorch Tensor に変換することもできます。
import torch
import numpy as np
# NumPyを使用して-1から1までのランダムな値の配列を作成します。
x_numpy = np.random.rand(3, 2) * 2 - 1
# NumPy配列をPyTorch Tensorに変換します。
x = torch.from_numpy(x_numpy)
print(x)
どの代替手段を使用するべきか
使用する代替手段は、特定の状況によって異なります。
- NumPy 配列からのデータを処理している場合は、
torch.from_numpy()
を使用して NumPy 配列を PyTorch Tensor に変換してから、ランダム化処理を行うことができます。 - 特定の範囲 内のランダムな値が必要な場合は、
torch.uniform()
を使用します。 - 標準正規分布 からランダムな値が必要な場合は、
torch.randn()
を使用します。 - 一様分布 からランダムな値が必要な場合は、
torch.rand()
またはtorch.uniform()
を使用します。
random_
メソッドは inplace 操作です。つまり、メソッドを呼び出すと、元のTensorが直接変更されます。元の値を保持したい場合は、clone()
メソッドを使用してコピーを作成してから、random_
メソッドを適用する必要があります。