如何在 Keras 中对卷积循环网络 ( CRNN ) 建模
How to model Convolutional recurrent network ( CRNN ) in Keras
我正在尝试将 CRNN 模型移植到 Keras。
但是,我在将 Conv2D 层的输出连接到 LSTM 层时卡住了。
CNN 层的输出将具有 ( batch_size, 512, 1, width_dash) 的形状,其中第一个取决于 batch_size,最后一个取决于input的输入宽度(该模型可以接受可变宽度输入)
例如:形状为 [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 维度35=] 型号
有人可以指导我如何将此模型的上述部分移植到 Keras 吗?
您不需要在 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
_________________________________________________________________
我正在尝试将 CRNN 模型移植到 Keras。
但是,我在将 Conv2D 层的输出连接到 LSTM 层时卡住了。
CNN 层的输出将具有 ( batch_size, 512, 1, width_dash) 的形状,其中第一个取决于 batch_size,最后一个取决于input的输入宽度(该模型可以接受可变宽度输入)
例如:形状为 [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 维度35=] 型号
有人可以指导我如何将此模型的上述部分移植到 Keras 吗?
您不需要在 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
_________________________________________________________________