logo

PyTorchで与えられた分布からランダムサンプリングする方法 📂機械学習

PyTorchで与えられた分布からランダムサンプリングする方法

概要

PyTorchで与えられた分布からランダムサンプリングする方法を紹介する。ベータ、ベルヌーイ、コーシー、ガンマ、パレート、ポアソンなど多くの分布が実装されている。この文章では、一様分布を例に説明する。

コード1

PyTorchで$0$から$5$まで一様分布からランダムサンプリングするコードは以下の通りだ。

>>> m = torch.distributions.Uniform(0.0, 5)
>>> m.sample()
tensor(1.6371)

$2 \times 4$サイズのテンソルをサンプリングするには、

>>> torch.distributions.Uniform(0.0, 5).sample((2,4))
tensor([[0.8507, 4.6457, 3.2871, 3.2514],
        [1.5863, 3.3836, 1.0727, 2.7350]])

これはNumPyでのnp.random.uniform(0.0, 5, (2,4))Juliaでの rand(Uniform(0.0, 5), 2,4)と似ている。

複数の範囲から抽出することも可能だが、この場合は範囲をテンソルとして入力する必要がある。$[0,2]$と$[5, 6]$の間からそれぞれ1つ抽出するには、

>>> m = torch.distributions.Uniform(torch.tensor([0.0, 5.0]), torch.tensor([2.0, 6.0]))
>>> m.sample()
tensor([1.0503, 5.5265])

環境

  • Colab
  • Version: Python 3.8.10, PyTorch1.13.1+cu116