Традиционно TensorFlow поддерживает RNN на основе CuDNN до tf.keras.layers.CuDNNGRU
и tf.keras.layers.CuDNNLSTM
. Но эти API-интерфейсы неудобны в ситуации, когда вы тренируетесь на GPU и делаете вывод на CPU, потому что им требуется GPU. TensorFlow 2.0 исправит это с помощью унифицированного API RNN, который использует CuDNN, когда это возможно, и в противном случае возвращается к более медленной реализации. И в заметках о выпуске TensorFlow 1.13 есть эта заманчивая заметка:
Изменить функцию периодической активации по умолчанию для LSTM с
'hard_sigmoid' в 'sigmoid' в 2.0. Исторически повторяющаяся активация
является 'hard_sigmoid', поскольку он быстрее, чем 'sigmoid'. С новым унифицированным
бэкэнд между режимом CPU и GPU, так как ядро CuDNN использует
sigmoid, мы также изменим значение по умолчанию для режима CPU на sigmoid. С
что LSTM по умолчанию будет совместим как с CPU, так и с GPU
ядро. Это позволит пользователю с графическим процессором по умолчанию использовать ядро CuDNN.
и получить 10-кратное повышение производительности в тренировках. Обратите внимание, что это
изменение контрольной точки. Если пользователь хочет использовать свои 1.x предварительно обученные
контрольная точка, пожалуйста, построите слой с
LSTM (recurrent_activation = 'hard_sigmoid') для возврата к 1.x
поведение.
Это в примечаниях к выпуску 1.13, поэтому я подумал, что, возможно, я смогу использовать этот API в 1.13, хотя сама заметка по какой-то причине говорит о 2.0. Есть ли способ сделать это? Я действительно мог бы использовать увеличение скорости CuDNN, но я не хочу переносить свой код на 2.0, пока он не станет стабильным.