Отдельный генератор случайности в PyTorch
Класс Generator хранит
своё состояние отдельно от
глобального генератора. Ему
задают зерно, а числа получают
через параметр generator
у функций вроде заполнения
равномерными значениями.
Создадим объект, зафиксируем на нём зерно и выведем короткий ряд:
import torch
gen = torch.Generator()
gen.manual_seed(100)
row = torch.rand(3, generator=gen)
print(row) # выведет tensor([0.1117, 0.8158, 0.2626])
Два разных объекта с разными зёрнами дают разные ряды, даже если глобальное зерно не трогать. Сравним два генератора:
import torch
left = torch.Generator()
left.manual_seed(5)
right = torch.Generator()
right.manual_seed(9)
print(torch.rand(3, generator=left)) # выведет tensor([0.8303, 0.1261, 0.9075])
print(torch.rand(3, generator=right)) # выведет tensor([0.6558, 0.3020, 0.4799])
Создайте генератор, задайте
ему зерно 2, получите
ряд из 4 равномерных
чисел через этот объект
и выведите его.
Создайте два генератора
с зёрнами 10 и 20,
получите по ряду из 3
равномерных чисел через каждый
и выведите оба ряда.
Создайте генератор с зерном
7, дважды подряд получите
по одному числу от нуля до
единицы через него и выведите
оба числа.