Почему randn не всегда имеет среднее значение 0 и дисперсию 1? - PullRequest
1 голос
/ 22 января 2020

Для метода PyTorch.randn () документация гласит:

Возвращает тензор, заполненный случайными числами из нормального распределения со средним 0 и дисперсией 1 (также называемый стандартным нормальным распределением).

Так вот пример тензора:

x = torch.randn(4,3)
tensor([[-0.6569, -0.7337, -0.0028],
        [-0.3938,  0.3223,  0.0497],
        [ 0.0129, -2.7546, -2.2488],
        [ 1.6754, -0.1497,  1.8202]])

Когда я печатаю среднее значение:

x.mean()
tensor(-0.2550)

Когда я печатаю стандартное отклонение:

x.std()
tensor(1.3225)

Так почему же не среднее значение 0, а стандартное отклонение 1?

Бонусный вопрос: как создать случайный тензор, который всегда имеет среднее значение 0?

Ответы [ 3 ]

4 голосов
/ 22 января 2020

Было бы большим совпадением, что конечная выборка распределения имеет точно то же самое среднее значение и точно то же стандартное отклонение. Следует ожидать, что чем больше чисел вы сгенерируете, тем ближе среднее значение и отклонение выборки приближаются к «истинному» среднему значению и отклонению распределения.

2 голосов
/ 22 января 2020

Я могу ответить только на половину: я думаю, вы неправильно поняли документацию. Он не должен анализироваться как «Возвращает тензор {заполненный случайными числами из нормального распределения} со средним 0 и дисперсией 1», а как «Возвращает тензор, заполненный {случайными числами из нормального распределения со средним 0 и дисперсией 1}» , Т.е. возвращенный тензор не имеет среднего значения 0 или дисперсии 1. Это только распределение, из которого взяты случайные числа, имеет среднее значение 0 и дисперсию 1.

1 голос
/ 22 января 2020

если вы действительно хотите, чтобы у данной выборки было среднее значение, равное нулю, и дисперсия 1 (в отличие от выборки из распределения с нулевым средним и единичной дисперсией), вы можете просто преобразовать ее, чтобы сделать так, например:

x = torch.randn(4,3)
x -= x.mean()
x /= x.std()

подобные вещи могут быть полезны

...