首页 文章

1D卷积层是否支持可变序列长度?

提问于
浏览
4

我有一系列经过处理的音频文件,我使用Keras作为CNN的输入 . Keras 1D卷积层是否支持可变序列长度? Keras文档对此不清楚 .

https://keras.io/layers/convolutional/

它在文档的顶部提到你可以使用(无,128)128维向量的可变长度序列 . 然而在底部它声明输入形状必须是a

3D tensor with shape: (batch_size, steps, input_dim)

Given the following example how should I input sequences of variable length into the network

假设我有两个示例(a和b)包含长度为100的X 1维向量,我想将其作为输入提供给1DConv层

a.shape = (100, 100)
b.shape = (200, 100)

我可以使用(2,无,100)的输入形状吗?我是否需要将这些张量连接到c所在的位置

c.shape = (300, 100)

然后重塑它成为某种东西

c_reshape.shape = (3, 100, 100)

其中3是批量大小,100是步数,第二个100是输入大小?关于输入向量的文档不是很清楚 .

1 回答

  • 4

    在定义模型时,Keras通过在相应维度中使用 None 来支持可变长度 .

    请注意, input_shape 经常指形状 without the batch size .

    因此,形状为 (batch_size, steps, input_dim) 的3D张量非常适合 input_shape=(steps, input_dim) 的模型 .

    你需要让这个模型接受变量长度,在步骤维度中使用 None

    input_shape=(None, input_dim)
    

    现在,关于变量长度有一个 numpy 限制 . 您无法创建具有适合可变长度的形状的numpy数组 .

    有两种解决方案:

    • 用虚拟值填充序列,直到它们都达到相同的大小,这样就可以将它们放入一个形状为 (batch_size, length, input_dim) 的numpy数组中 . 使用 Masking 图层来忽略虚拟值 .

    • 使用单独的numpy数组 (1, length, input_dim) 训练,每个数组都有自己的长度 .

相关问题