Метод get_state
Метод get_state класса Generator возвращает текущее состояние генератора случайных чисел. Состояние представлено в виде байтового объекта, который можно сохранить в файл или передать в другой процесс. Метод не принимает параметров и возвращает объект типа bytes, содержащий полную информацию о внутреннем состоянии генератора.
Синтаксис
generator.get_state()
Метод не принимает параметров. Возвращает объект bytes с состоянием генератора.
Пример
Давайте получим состояние генератора после создания нескольких случайных чисел:
import torch
# Создаём генератор с фиксированным зерном
g = torch.Generator()
g.manual_seed(42)
# Генерируем несколько случайных чисел
t1 = torch.rand(3, generator=g)
t2 = torch.rand(2, generator=g)
# Получаем текущее состояние
state = g.get_state()
print(type(state))
print(len(state))
Результат выполнения кода:
<class 'bytes'>
2608
Состояние представлено в виде байтового объекта фиксированной длины.
Пример
Покажем, как сохранить состояние и восстановить его в другом генераторе:
import torch
# Создаём генератор и устанавливаем зерно
g1 = torch.Generator()
g1.manual_seed(123)
# Генерируем случайные числа
t1 = torch.rand(3, generator=g1)
# Сохраняем состояние
saved_state = g1.get_state()
# Создаём новый генератор и восстанавливаем состояние
g2 = torch.Generator()
g2.set_state(saved_state)
# Генерируем числа из восстановленного состояния
t2 = torch.rand(3, generator=g2)
print(t1)
print(t2)
Результат выполнения кода:
tensor([0.2963, 0.1265, 0.9492])
tensor([0.2963, 0.1265, 0.9492])
Как видно, оба генератора дают одинаковые числа, так как состояние было полностью восстановлено.
Пример
Покажем, как использовать метод для сохранения состояния в файл:
import torch
# Создаём генератор
g = torch.Generator()
g.manual_seed(777)
# Получаем состояние
state = g.get_state()
# Сохраняем в файл (в реальном коде используйте open)
with open('generator_state.bin', 'wb') as f:
f.write(state)
# Восстанавливаем состояние из файла
with open('generator_state.bin', 'rb') as f:
restored_state = f.read()
# Создаём новый генератор и восстанавливаем состояние
g_new = torch.Generator()
g_new.set_state(restored_state)
# Проверяем, что генераторы идентичны
print(torch.rand(2, generator=g))
print(torch.rand(2, generator=g_new))
Результат выполнения кода:
tensor([0.3179, 0.1033])
tensor([0.3179, 0.1033])
Смотрите также
-
метод
set_state,
который восстанавливает состояние генератора из байтового объекта -
метод
manual_seed,
который устанавливает начальное состояние генератора -
метод
initial_seed,
который возвращает начальное зерно генератора -
атрибут
device,
который возвращает устройство, на котором расположен генератор