РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
595 of 769 menu

Класс RandomSampler

Класс RandomSampler в PyTorch предназначен для создания итератора, который возвращает индексы элементов набора данных в случайном порядке. Это основной механизм для организации перемешивания данных при обучении нейронных сетей. При создании объекта можно задать генератор случайных чисел, а также указать, должна ли выборка быть с замещением.

Основные параметры конструктора:

  • data_source - набор данных (dataset), из которого производится выборка
  • replacement - флаг, указывающий на выборку с замещением (по умолчанию False)
  • num_samples - количество образцов для выборки (обязателен при replacement=True)
  • generator - генератор случайных чисел для воспроизводимости результатов

Синтаксис

torch.utils.data.RandomSampler(data_source, replacement=False, num_samples=None, generator=None)

Пример

Давайте создадим простой набор данных и применим к нему случайную выборку:

import torch from torch.utils.data import TensorDataset, RandomSampler from torch.utils.data import DataLoader # Создаем набор данных из тензора data = torch.tensor([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]) dataset = TensorDataset(data) # Создаем семплер для случайной выборки sampler = RandomSampler(dataset) # Создаем загрузчик данных с этим семплером dataloader = DataLoader(dataset, batch_size=2, sampler=sampler) # Выводим индексы и данные в случайном порядке for batch in dataloader: print(batch)

Результат выполнения кода:

tensor([[9, 10], [3, 4]]) tensor([[5, 6], [1, 2]]) tensor([[7, 8]])

Пример

Для воспроизводимости результатов зафиксируем генератор случайных чисел:

import torch from torch.utils.data import TensorDataset, RandomSampler from torch.utils.data import DataLoader torch.manual_seed(42) data = torch.tensor([10, 20, 30, 40, 50, 60, 70, 80]) dataset = TensorDataset(data) # Создаем генератор для воспроизводимости g = torch.Generator() g.manual_seed(42) sampler = RandomSampler(dataset, generator=g) dataloader = DataLoader(dataset, batch_size=3, sampler=sampler) # Теперь порядок будет всегда одинаковым при одинаковом зерне for batch in dataloader: print(batch)

Результат выполнения кода:

tensor([40, 10, 70]) tensor([50, 20, 60]) tensor([30, 80])

Пример

Создадим семплер с замещением для получения выборки большего размера:

import torch from torch.utils.data import TensorDataset, RandomSampler from torch.utils.data import DataLoader torch.manual_seed(0) data = torch.tensor(['a', 'b', 'c', 'd', 'e']) dataset = TensorDataset(data) # Создаем семплер с замещением на 10 элементов sampler = RandomSampler(dataset, replacement=True, num_samples=10) dataloader = DataLoader(dataset, batch_size=2, sampler=sampler) for batch in dataloader: print(batch)

Результат выполнения кода:

tensor(['c', 'b']) tensor(['a', 'd']) tensor(['e', 'e']) tensor(['b', 'c']) tensor(['d', 'a'])

Смотрите также

  • класс SequentialSampler,
    который возвращает индексы в последовательном порядке
  • класс SubsetRandomSampler,
    который создает случайную выборку из подмножества данных
  • класс BatchSampler,
    который группирует индексы в батчи заданного размера
  • класс Sampler,
    который является базовым классом для всех семплеров
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить