【问题标题】:How to model Convolutional recurrent network ( CRNN ) in Keras如何在 Keras 中建模卷积循环网络 (CRNN)
【发布时间】:2018-06-29 14:26:14
【问题描述】:

我试图将 CRNN 模型移植到 Keras。

但是,我在将 Conv2D 层的输出连接到 LSTM 层时卡住了。

CNN 层的输出将具有 (batch_size, 512, 1, width_dash) 的形状,其中第一个取决于 batch_size,最后一个取决于输入的输入宽度(此模型可以接受变量宽度输入)

例如:形状为 [2, 1, 32, 829] 的输入结果输出形状为 (2, 512, 1, 208)

现在,按照Pytorch model,我们必须先执行 squeeze(2),然后执行 permute(2, 0, 1) 它会产生一个形状为 [208, 2, 512 ]

的张量

我试图用 Keras 来实现,但我没能做到,因为在 Keras 中,我们无法更改 keras.models.Sequential 模型中的 batch_size 维度

有人可以指导我如何将此模型的上述部分移植到 Keras 吗?

Current state of ported CNN layer

【问题讨论】:

  • 更新:Successfully ported Pytorch 模型进入 Keras,我能够使用 Keras-js 在 Web 浏览器中运行经过训练的模型。

标签: keras lstm recurrent-neural-network pytorch


【解决方案1】:

您不需要在 Keras 中置换批处理轴。在 pytorch 模型中,您需要这样做,因为 pytorch LSTM 需要输入形状 (seq_len, batch, input_size)。然而在 Keras 中,LSTM 层需要(batch, seq_len, input_size)

因此,在定义 CNN 并挤出轴 2 之后,您只需要置换最后两个轴即可。举个简单的例子('channels_first'Keras 图像格式),

model = Sequential()
model.add(Conv2D(512, 3, strides=(32, 4), padding='same', input_shape=(1, 32, None)))
model.add(Reshape((512, -1)))
model.add(Permute((2, 1)))
model.add(LSTM(32))

您可以使用model.summary() 验证形状:

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
conv2d_4 (Conv2D)            (None, 512, 1, None)      5120
_________________________________________________________________
reshape_3 (Reshape)          (None, 512, None)         0
_________________________________________________________________
permute_4 (Permute)          (None, None, 512)         0
_________________________________________________________________
lstm_3 (LSTM)                (None, 32)                69760
=================================================================
Total params: 74,880
Trainable params: 74,880
Non-trainable params: 0
_________________________________________________________________

【讨论】:

  • 你能看看this question
  • 如果 input_shape 是 (1, 3, 28) 有含义(通道、时间步、特征),那么卷积的输出将是 (512, channels, 3, 28)?跨度>
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 2019-02-26
  • 1970-01-01
  • 2019-08-18
  • 2017-12-20
  • 1970-01-01
  • 2018-02-06
  • 2018-05-29
相关资源
最近更新 更多