我有一系列经过处理的音频文件,我使用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 回答
在定义模型时,Keras通过在相应维度中使用
None
来支持可变长度 .请注意,
input_shape
经常指形状 without the batch size .因此,形状为
(batch_size, steps, input_dim)
的3D张量非常适合input_shape=(steps, input_dim)
的模型 .你需要让这个模型接受变量长度,在步骤维度中使用
None
:现在,关于变量长度有一个 numpy 限制 . 您无法创建具有适合可变长度的形状的numpy数组 .
有两种解决方案:
用虚拟值填充序列,直到它们都达到相同的大小,这样就可以将它们放入一个形状为
(batch_size, length, input_dim)
的numpy数组中 . 使用Masking
图层来忽略虚拟值 .使用单独的numpy数组
(1, length, input_dim)
训练,每个数组都有自己的长度 .