如何在 TensorFlow 中 select 正确 API/implementation LSTM 单元?

How to select a proper API/implementation of an LSTM cell in TensorFlow?

在 Tensorflow 中,同一任务在不同 API 下有许多不同的实现。对于 LSTM 单元,可以找到许多实现,例如,

  1. tf.nn.rnn_cell.LSTMCell
  2. tf.contrib.rnn.LSTMBlockCell
  3. tf.keras.layers.LSTMCell
  4. tf.keras.layers.LSTM

我应该select执行上面的哪一个?有一般准则吗?例如总是使用 tf.nn > tf.keras > tf.layers > tf.贡献。

在一个稍微相关的问题 (对于批量归一化)中,批准的答案说 tf.contrib 不是一个好的选择,因为它是早期实施。其中,KERASAPI也使用了tf.nn。所以它看起来像 tf.nn > tf.keras > tf.contrib.

这里 RNN Performance 是一些关于 TensorFlow 的建议。文档中的几个要点:

  • 在 NVIDIA GPU 上使用 tf.contrib.cudnn_rnn()
  • 使用 tf.nn.dynamic_rnn() 而不是 tf.nn.static_rnn()。可能他们的意思是,我们需要添加 sequence_length 以避免额外的计算。