Как создать нормальный дистрибутив в pytorch - PullRequest
0 голосов
/ 02 июля 2018

Я хочу создать случайное нормальное распределение в pytorch, а mean и std равны 4, 0.5 соответственно. Я не нашел API для этого. Кто-нибудь знает? Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Для стандартного нормального распределения (т.е. mean=0 и variance=1) вы можете использовать torch.randn()

Для вашего случая пользовательских mean и std вы можете использовать torch.distributions.Normal()


Начальная подпись:
tdist.Normal (loc, scale, validate_args = None)

строка документации:
Создает нормальное (также называемое гауссовским) распределение, параметризованное loc и scale.

Args:
loc (float или Tensor): среднее значение распределения (часто называемое mu)
шкала (поплавок или тензор): стандартное отклонение распределения (часто называемый сигмой)


Вот пример:

In [32]: import torch.distributions as tdist

In [33]: n = tdist.Normal(torch.tensor([4.0]), torch.tensor([0.5]))

In [34]: n.sample((2,))
Out[34]: 
tensor([[ 3.6577],
        [ 4.7001]])
0 голосов
/ 17 марта 2019

Простой вариант - использовать функцию randn из базового модуля. Создает случайную выборку из стандартного распределения Гаусса. Чтобы изменить среднее значение и стандартное отклонение, вы просто используете сложение и умножение. Ниже я создаю образец размера 5 из вашего запрошенного дистрибутива.

import torch
torch.randn(5) * 0.5 + 4 # tensor([4.1029, 4.5351, 2.8797, 3.1883, 4.3868])
0 голосов
/ 02 июля 2018

Вы можете создать свой дистрибутив, как описано здесь в документации. В вашем случае это должен быть правильный вызов, включая выборку из созданного дистрибутива:

from torch.distributions import normal

m = normal.Normal(4.0, 0.5)
m.sample()
...