Как накапливать градиент по мини-партии, а затем обратное распространение в Chainer?

Я делаю классификацию видео последовательности, мне нужно 2 вещи:

  1. Из-за ограниченной памяти графического процессора я хочу накапливать градиент в мини-пакете, а затем среднее значение градиента, а затем обратное распространение.

  2. Мне нужно знать, как перетасовывать между мини-пакетами, но не перетасовывать внутри каждой мини-серии, потому что я хочу, чтобы последовательность видео сохраняла свой порядок.

1 ответ

Решение

Вопрос 1: Вы можете пересылать и возвращать каждый мини-пакет, но не вызывать optimizer.update(), после того как вы повторили перемотку вперед и назад для необходимых мини-пакетов, вы можете вызвать optimizer.update() для обновления на основе накопленных градиентов.

Если вы хотите добиться этого с trainer модуль, я думаю, вам нужно переопределить StandardUpdater определить свой собственный Updater класс, чтобы сделать выше.

Вопрос 2: вы используете trainer модуль? Если это так, вы можете определить свой собственный итератор для достижения этой цели. Смотрите также ниже для справки, как определить класс итератора.

Другие вопросы по тегам