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