我想加速我的LSTM网络,但是当我将它用于OCR(序列具有可变长度)时,我不能使用普通的LSTM实现.这就是我使用"tf.nn.dynamic_rnn"的原因.
基于张量流中的RNN基准(https://github.com/tensorflow/tensorflow/blob/754048a0453a04a761e112ae5d99c149eb9910dd/tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_ops_benchmark.py#L77),CUDNN实现用于创建所有模型立刻(它不像其他人那样使用"tf.nn.rnn"结构).我假设可能不可能使用可变长度的CUDNN,但也许任何人都成功了吗?
其次,这是使用"tf.nn.bidirectional_dynamic_rnn",因为我想将Bi-LSTM用于OCR.但是在实施第一部分之后应该解决这个问题.
编辑:看起来"tf.contrib.cudnn_rnn.CudnnLSTM"里面有"双向"实现.所以唯一未知的是CUDNN可以与变量输入序列一起使用.
或许任何使用'CudnnLSTM'的工作示例都会有所帮助.
我在 TensorFlow 上实现了全卷积网络。它使用编码器-解码器结构。训练时,我总是使用相同的图像大小(224x224,使用随机裁剪)并且一切正常。
在干扰阶段,我想一次预测一张图像,因为我想使用完整图像(未裁剪)。例如,这样的图像有 size [406,256]。这是问题。在 Encoder-Decoder 架构中,我添加了两个 tesors (z = x + y)。训练时,两个张量的大小匹配。在预测我的单个图像时,大小不匹配(张量大小:[1,47,47,64]vs [1,46,46,64])。我认为这是由 Conv 和 Pool 层中的一些舍入造成的。
我应该改变我的架构以适用于我想要的任何图像尺寸?我应该更改舍入参数吗?或者添加张量的“裁剪”?
架构实现链接:https : //gist.github.com/melgor/0e43cadf742fe3336148ab64dd63138f (问题出现在第166行)