ニューラルネットワークの初期化に役立つ!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_ メソッドを適用する必要があります。