代码之家  ›  专栏  ›  技术社区  ›  Rocket Pingu

将CNN输出传递到Tensorflow中的LSTM?

  •  1
  • Rocket Pingu  · 技术社区  · 7 年前

    假设CNN的输出为 [batch_size, height, width, number_of_channels] (假设格式为 channels_last ),我有一种将CNN维度转换为RNN维度的方法:

    def collapse_to_rnn_dims(inputs):
        batch_size, height, width, num_channels = inputs.get_shape().as_list()
        if batch_size is None:
            batch_size = -1
        return tf.reshape(inputs, [batch_size, width, height * num_channels])
    

    它确实有效。然而,我只是想问一下,这是否真的是重塑CNN输出的正确方法,以便它们可以传递到LSTM层。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Rocket Pingu    7 年前

    我找到了答案 here 这正是我为手写文本识别所做的,虽然这一个假设 number_of_time_steps (宽度)是动态的,而不是 batch_size

    shape = cnn_net.get_shape().as_list()  # [batch, height, width, features]
    transposed = tf.transpose(cnn_net, perm=[0, 2, 1, 3],
                              name='transposed')  # [batch, width, height, features]
    conv_reshaped = tf.reshape(transposed, [shape[0], -1, shape[1] * shape[3]],
                               name='reshaped')  # [batch, width, height x features]