Я хочу увеличить размер мини-пакета для моей нейронной сети во время тренировки (вместо того, чтобы уменьшить скорость обучения), но верхний предел для мини-размера пакета равен 8 из-за памяти GPU.
Я нашел эту статью
https://medium.com/@davidlmorton/increasing-mini-batch-size-without-increasing-memory-6794e10db672
о том, как увеличить размер мини-пакета без увеличения памяти, и делает это путем реализации DataLoader в PyTorch.
Техника проста, вы просто вычисляете и суммируете градиенты по нескольким мини-пакетам. Только после указанного количества мини-партий вы обновляете параметры модели.
count = 0
for inputs, targets in training_data_loader:
if count == 0:
optimizer.step()
optimizer.zero_grad()
count = batch_multiplier
outputs = model(inputs)
loss = loss_function(outputs, targets) / batch_multiplier
loss.backward()
count -= 1
Однако я не смог найти никаких примеров для этого в Керасе. Я предполагаю, что это должно быть сделано с использованием data_generator (Sequence) , в функции __ getitem __ ?
Но я понятия не имею, как это реализовать, или если это такдаже возможно в Керасе. Я также пытался просмотреть примеры DataGenerators, но ни один из них не был связан с оптимизаторами.
Буду признателен, если кто-нибудь сможет мне помочь!