Как вычислять и суммировать градиенты по нескольким мини-пакетам в Керасе? - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу увеличить размер мини-пакета для моей нейронной сети во время тренировки (вместо того, чтобы уменьшить скорость обучения), но верхний предел для мини-размера пакета равен 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, но ни один из них не был связан с оптимизаторами.
Буду признателен, если кто-нибудь сможет мне помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...