Недетерминированные градиентные вычисления

Я понял, что мои модели оказываются разными каждый раз, когда я их тренирую, хотя я сохраняю случайное начальное число TensorFlow одинаковым.

Я подтвердил, что:

  • Инициализация является детерминированной; веса идентичны до первого обновления.
  • Входные данные являются детерминированными. Фактически, различные форвардные вычисления, включая потери, идентичны для самой первой партии.
  • Градиенты для первой партии различны. Конкретно, я сравниваю результаты tf.gradients(loss, train_variables), В то время как loss а также train_variables имеют одинаковые значения, градиенты иногда разные для некоторых переменных. Различия довольно значительны (иногда сумма абсолютных разностей для градиента одной переменной больше 1).

Я пришел к выводу, что именно вычисление градиента вызывает недетерминизм. Я посмотрел на этот вопрос, и проблема сохраняется при запуске на процессоре с intra_op_parallelism_thread=1 а также inter_op_parallelism_thread=1,

Как обратный проход может быть недетерминированным, когда прямой проход не является? Как я мог отладить это дальше?

1 ответ

Этот ответ может показаться немного очевидным, но используете ли вы какую-то недетерминированную регуляризацию, такую ​​как отсев? Учитывая, что выпадение "пропускает" некоторые соединения случайным образом во время тренировки, это может быть причиной разницы в градиентах.

Редактировать: Похожие вопросы:

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