har*_*704 5 lstm keras recurrent-neural-network pytorch
我试图将CRNN模型移植到 Keras。
但是,我在将 Conv2D 层的输出连接到 LSTM 层时卡住了。
CNN 层的输出将具有(batch_size, 512, 1, width_dash)的形状,其中第一个取决于 batch_size,最后一个取决于输入的输入宽度(此模型可以接受可变宽度输入)
例如:形状为[2, 1, 32, 829]的输入产生形状为(2, 512, 1, 208) 的输出
现在,根据Pytorch 模型,我们必须执行挤压 (2) 和permute(2, 0, 1) 它将产生一个形状为 [208, 2, 512] 的张量
我试图实现这是 Keras,但我无法做到这一点,因为在 Keras 中,我们无法更改keras.models.Sequential模型中的batch_size 维度
有人可以指导我如何将这个模型的一部分移植到 Keras 吗?
您不需要在 Keras 中置换批处理轴。在 pytorch 模型中,您需要这样做,因为 pytorch LSTM 需要输入 shape (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))
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法验证形状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
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5475 次 |
| 最近记录: |