Для сбалансированной партии, что означает равное (или близкое к равному) количество выборок на категорию в каждой партии, есть несколько подходов: образцы). В этом подходе вы можете использовать следующий код:
https://github.com/galatolofederico/pytorch-balanced-batch
-Undersampling (предоставляет количество выборок для всех категорий на основе наименьшего номера категории). По моему опыту, функция ниже делает то же самое с использованием библиотеки PyTorch:
torch.utils.data.sampler.WeightedRandomSampler(weights, len(weights))
Где веса - это вероятность каждого образца, это зависит от того, сколько образцов в каждой категории у вас есть, например, если ваши данные простые так как эти данные = [0, 1, 0, 0, 1], счетчик класса «0» равен 3, а счетчик класса «1» равен 2 Таким образом, вектор весов равен [1/3, 1/2, 1/3, 1 / 3, 1/2]. С этим вы можете вызвать WeightedRamdomSampler, и он сделает это за вас. Вам нужно вызвать его в Dataloader. Код для его настройки:
sampler = torch.utils.data.sampler.WeightedRandomSampler(weights, len(weights))
train_dataloader = DataLoader(dataset_train, batch_size=mini_batch,
sampler=sampler, shuffle=False,
num_workers=1)