TensorFlow:如何使用具有可变输入长度(如 dynamic_rnn)的 CudnnLSTM?
TensorFlow: How to use CudnnLSTM with variable input length (like dynamic_rnn)?
我想加速我的 LSTM 网络,但由于我将它用于 OCR(其中序列具有可变长度),我无法使用普通的 LSTM 实现。这就是为什么我使用 "tf.nn.dynamic_rnn".
基于 tensorflow (https://github.com/tensorflow/tensorflow/blob/754048a0453a04a761e112ae5d99c149eb9910dd/tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_ops_benchmark.py#L77) 中 RNN 的基准测试,CUDNN 实现用于一次创建所有模型(它不像其他的那样使用 "tf.nn.rnn" 结构)。我认为使用可变长度的 CUDNN 可能是不可能的,但也许有人成功了?
其次,这是使用 "tf.nn.bidirectional_dynamic_rnn",因为我想将 Bi-LSTM 用于 OCR。但这应该在实施第一部分后解决。
编辑:看起来 "tf.contrib.cudnn_rnn.CudnnLSTM" 内部有 "bidirectional" 实现。所以唯一未知的是 CUDNN 可以与可变输入序列一起使用。
或者任何使用 'CudnnLSTM' 的工作示例可能会有帮助。
刚找到这个:
tf.contrib.cudnn_rnn.CudnnLSTM currently does not support batches with sequences of different length, thus this is normally not an option to use.
来源:http://returnn.readthedocs.io/en/latest/tf_lstm_benchmark.html
TensorFlow 很快就会支持可变序列长度:https://github.com/tensorflow/tensorflow/blob/2f672ee9562a452f8dbfa259a8ccec56367e9b17/tensorflow/contrib/cudnn_rnn/python/layers/cudnn_rnn.py#L389
1.13 似乎发布得太晚了,所以它可能只能在 TensorFlow 1.14 上使用。
你今天可以通过安装 tf-nightly-gpu
包并传递 sequence_lengths=lengths
来试用它,其中 lenghts
是一个 tf.int32
张量,形状为 [batch_size]
,包含批次中每个序列的长度。
我想加速我的 LSTM 网络,但由于我将它用于 OCR(其中序列具有可变长度),我无法使用普通的 LSTM 实现。这就是为什么我使用 "tf.nn.dynamic_rnn".
基于 tensorflow (https://github.com/tensorflow/tensorflow/blob/754048a0453a04a761e112ae5d99c149eb9910dd/tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_ops_benchmark.py#L77) 中 RNN 的基准测试,CUDNN 实现用于一次创建所有模型(它不像其他的那样使用 "tf.nn.rnn" 结构)。我认为使用可变长度的 CUDNN 可能是不可能的,但也许有人成功了?
其次,这是使用 "tf.nn.bidirectional_dynamic_rnn",因为我想将 Bi-LSTM 用于 OCR。但这应该在实施第一部分后解决。
编辑:看起来 "tf.contrib.cudnn_rnn.CudnnLSTM" 内部有 "bidirectional" 实现。所以唯一未知的是 CUDNN 可以与可变输入序列一起使用。
或者任何使用 'CudnnLSTM' 的工作示例可能会有帮助。
刚找到这个:
tf.contrib.cudnn_rnn.CudnnLSTM currently does not support batches with sequences of different length, thus this is normally not an option to use.
来源:http://returnn.readthedocs.io/en/latest/tf_lstm_benchmark.html
TensorFlow 很快就会支持可变序列长度:https://github.com/tensorflow/tensorflow/blob/2f672ee9562a452f8dbfa259a8ccec56367e9b17/tensorflow/contrib/cudnn_rnn/python/layers/cudnn_rnn.py#L389
1.13 似乎发布得太晚了,所以它可能只能在 TensorFlow 1.14 上使用。
你今天可以通过安装 tf-nightly-gpu
包并传递 sequence_lengths=lengths
来试用它,其中 lenghts
是一个 tf.int32
张量,形状为 [batch_size]
,包含批次中每个序列的长度。