Как описано в других ответах, iterations_per_loop
- это параметр настройки, который контролирует объем работы, выполняемой TPU, перед повторной проверкой.Меньшее число позволяет вам чаще проверять результаты (и оценивать их), а большее число уменьшает накладные расходы из-за синхронизации.
Это не отличается от известных методов буферизации сети или файлов;изменение его значения влияет на производительность, но не на ваш конечный результат.Напротив, гиперпараметры ML, такие как num_epochs
, train_steps
или train_batch_size
, изменят ваш результат.
РЕДАКТИРОВАТЬ: Добавление иллюстрации в псевдокоде ниже. Условно, тренировочный цикл функционирует следующим образом:
def process_on_TPU(examples, train_batch_size, iterations_per_loop):
# The TPU will run `iterations_per_loop` training iterations before returning to the host
for i in range(0, iterations_per_loop):
# on every iteration, the TPU will compute `train_batch_size` examples,
# calculating the gradient from every example in the given batch
compute(examples[i * train_batch_size : (i + 1) * train_batch_size])
# assume each entry in `example` is a single training example
for b in range(0, train_steps, train_batch_size * iterations_per_loop)
process_on_TPU(examples[b:b + train_batch_size * iterations_per_loop],
train_batch_size,
iterations_per_loop)
Из этого может показаться, что train_batch_size
и iterations_per_loop
- это просто два разных способа выполнения одной и той же вещи.Однако, это не так;train_batch_size
влияет на скорость обучения, поскольку (по крайней мере, в ResNet-50) градиент вычисляется на каждой итерации из среднего значения градиента для каждого примера в пакете.Выполнение 50 шагов на 50 000 примеров приведет к отличному результату от 1 000 шагов на 50 000 примеров, поскольку в последнем случае вычисление градиента выполняется гораздо чаще.
РЕДАКТИРОВАТЬ 2: Ниже приведен способвизуализировать происходящее с гоночной метафорой.Думайте о TPU как о гонке, которая имеет дистанцию train_steps
примеров, и ее шаг позволяет ей покрывать серию примеров за шаг.Гонка проходит по трассе, которая короче общей дистанции гонки;длина круга - это общее количество тренировочных примеров, а каждый круг на трассе - одна эпоха.Вы можете думать о iterations_per_loop
как о точке, в которой TPU может остановиться на своего рода «водной станции», где обучение временно приостанавливается для выполнения различных задач (бенчмаркинг, контрольные точки, другие операции по дому).