Python 变长例子的张量流卷积

Python 变长例子的张量流卷积,python,tensorflow,Python,Tensorflow,我正试图设计一个卷积神经网络来训练预处理的音频文件。由于音频文件的长度不同,因此培训示例在一维中的大小是可变的。我已经通过零填充所有示例使网络工作到相同的长度,但我担心这会降低网络的准确性。我正在使用一个TensorFlow占位符,并尝试将其形状设置为[1,None,None],这样无论每个示例的形状是什么,它都应该适合。但这给了我一个错误,当它得到卷积部分时: conv = tf.layers.conv1d( inputs = input, filter

我正试图设计一个卷积神经网络来训练预处理的音频文件。由于音频文件的长度不同,因此培训示例在一维中的大小是可变的。我已经通过零填充所有示例使网络工作到相同的长度,但我担心这会降低网络的准确性。我正在使用一个TensorFlow占位符,并尝试将其形状设置为[1,None,None],这样无论每个示例的形状是什么,它都应该适合。但这给了我一个错误,当它得到卷积部分时:

    conv = tf.layers.conv1d(
        inputs = input,
        filters = 20,
        kernel_size = 5,
        name = "conv"
    )
正在给出错误:

ValueError: Shape of a new variable (conv/kernel) must be fully defined, but instead was (5, ?, 20).

因此,TensorFlow似乎不允许使用占位符对未知形状进行卷积。是否有一种解决方法可以独立运行每个示例,而不将它们填充到相同的长度?

没有100%的把握,但我非常确定您需要完全定义输入形状。当需要更新神经网络的权值时,任何库都需要获取每个权值相对于输入的每个维度的梯度。如果输入的维度每次都改变,我认为你无法计算这个梯度。谢谢,我一直在想这是否可行,但我对所有这些东西都相当陌生,所以我想我应该问一下。是的,你需要在批中的所有示例中都使用相同的长度维度。在卷积之后,您可以做的是用0、-inf或+inf之类的东西来掩盖每个实例的实际长度。