我使用Keras将一系列经过处理的音频文件用作CNN的输入。 Keras 1D卷积层是否支持可变序列长度? Keras文档对此不清楚。
https://keras.io/layers/convolutional/
在文档的顶部,它提到您可以使用(无,128)128维向量的可变长度序列。然而在底部它声明输入形状必须是
3D tensor with shape: (batch_size, steps, input_dim)
鉴于以下示例,我应该如何将可变长度的序列输入网络
假设我有两个例子(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是输入大小?关于输入向量的文档不是很清楚。
答案 0 :(得分:5)
Keras在定义模型时通过在相应维度中使用None
来支持可变长度。
请注意,input_shape
通常指的是没有批量大小的形状。
因此,形状(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
图层来忽略虚拟值。 (1, length, input_dim)
进行训练,每个数组都有自己的长度。