Недетерминированные градиентные вычисления
Я понял, что мои модели оказываются разными каждый раз, когда я их тренирую, хотя я сохраняю случайное начальное число TensorFlow одинаковым.
Я подтвердил, что:
- Инициализация является детерминированной; веса идентичны до первого обновления.
- Входные данные являются детерминированными. Фактически, различные форвардные вычисления, включая потери, идентичны для самой первой партии.
- Градиенты для первой партии различны. Конкретно, я сравниваю результаты
tf.gradients(loss, train_variables)
, В то время какloss
а такжеtrain_variables
имеют одинаковые значения, градиенты иногда разные для некоторых переменных. Различия довольно значительны (иногда сумма абсолютных разностей для градиента одной переменной больше 1).
Я пришел к выводу, что именно вычисление градиента вызывает недетерминизм. Я посмотрел на этот вопрос, и проблема сохраняется при запуске на процессоре с intra_op_parallelism_thread=1
а также inter_op_parallelism_thread=1
,
Как обратный проход может быть недетерминированным, когда прямой проход не является? Как я мог отладить это дальше?
1 ответ
Этот ответ может показаться немного очевидным, но используете ли вы какую-то недетерминированную регуляризацию, такую как отсев? Учитывая, что выпадение "пропускает" некоторые соединения случайным образом во время тренировки, это может быть причиной разницы в градиентах.
Редактировать: Похожие вопросы: