Tensorflow2 LSTM (cuDNN args) против разницы в реализации tenorflow1 CuDNNLSTM - PullRequest
2 голосов
/ 10 июля 2020

В тензорном потоке 1 есть уровень tf.compat.v1.keras.layers.CuDNNLSTM, который построен для использования cuDNN, тогда как в тензорном потоке 2 этот уровень устарел в пользу использования tf.keras.layers.LSTM с

  1. `activation` == `tanh`
  2. `recurrent_activation` == `sigmoid`
  3. `recurrent_dropout` == 0
  4. `unroll` is `False`
  5. `use_bias` is `True`
  6. Inputs are not masked or strictly right padded.

для реализации cuDNN. Я не знаю, есть ли ошибка или какая-то разница, которая не была реализована, но, похоже, есть разница с CuDNNLSTM с использованием смещения ввода и с повторяющимся смещением, где как LSTM в приведенном выше tf2 Правила cuDNN используют только повторяющееся смещение.

связанный код

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM
from tensorflow.compat.v1.keras.layers import CuDNNLSTM

print(tf.__version__)

model1 = Sequential()
model1.add(LSTM(1, activation='tanh', recurrent_dropout=0, unroll=False, use_bias=True, return_sequences=0, input_shape=(1, 1)))
print(model1.summary())

model2 = Sequential()
model2.add(CuDNNLSTM(1, return_sequences=0, input_shape=(1, 1)))
print(model2.summary())
2.2.0
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm (LSTM)               (None, 1)                 12        
=================================================================
Total params: 12
Trainable params: 12
Non-trainable params: 0
_________________________________________________________________
None
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
cu_dnnlstm (CuDNNLSTM)    (None, 1)                 16        
=================================================================
Total params: 16
Trainable params: 16
Non-trainable params: 0
_________________________________________________________________

Обратите внимание, что общие параметры отличаются на N_units * 4, что означает отсутствие дополнительного вектора смещения для каждой ячейки.

Обратите внимание, что реализация LSTM в pytorch соответствует tf1 CuDNNLSTM, вот как я наткнулся на это.

Есть ли какое-то исправление, которое мне не хватает, или его следует повысить до уровня github?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...