Keras 中 Conv1D 层的输出大小

new*_*e99 2 python keras tensorflow

我试图理解应用于多个批次(本例中为 3 个)2D 输入形状 (6x6) 的 1D 卷积层的输出。

下面代码的输出是(4, 10, 32)。对于前两个指数来说,这个答案非常简单。

  • (4) 我们插入N个例子,我们得到N个例子。
  • (8) 在 (10, 128) * (3, 1) 之间进行卷积时,由于默认填充设置为“有效”,因此输入空间中的两个值不会映射到最终结果,这就是为什么我们得到 8。
  • 我不明白为什么该层输出 32 作为最终索引。filtersConv1D 层中参数的实际作用是什么?对于我来说,该层如何操作最终输出(如下面的短语所述)并不是很直观。

根据文档,这应该是输出形状

输出形状:3+D 张量,形状:batch_shape + (new_steps,filters) 步骤值可能由于填充或步幅而发生变化。

input_shape = (4, 10, 128)
x = tf.random.normal(input_shape)
y = tf.keras.layers.Conv1D(
    32, 3, input_shape=input_shape[1:])(x)
print(y.shape) # (4, 10, 32)
Run Code Online (Sandbox Code Playgroud)

B D*_*het 5

你的前两个陈述是正确的。过滤器可以看作是对序列执行卷积的次数。

在下中,您可以看到所执行的操作。左边的对象代表你的输入,中间的对象代表你的内核(大小为 (3,1)),右边的对象代表你的输出。

在此输入图像描述

  • 在您的情况下,如果您的过滤器数量等于 1,您将生成128 个大小为3 的内核来浏览您的系列。
  • 对于每个内核,它处理卷积运算:将内核值与系列值相乘并对 3 个乘积求和。
  • 然后对128个结果进行总结。
  • 如果您将过滤器的数量设置为 32,则整个操作将执行32 次
  • 因此,Conv1D 的参数数量(无偏差)为:kernel_size * input_depth * number_filters = 3 * 128 * 32 = 12,288。
  • 使用偏差,您可以将过滤器的数量添加到之前的结果中 (12,288 + 32 = 12320)。

因此,过滤器的数量就是处理该操作的次数。然后将输出堆叠起来,并在下一个卷积层中重复该过程。

不幸的是,我没有找到任何表示来很好地理解 conv1D。这一篇针对 Conv2D,解释了与 Conv1D 相同的过程。(inuth_深度 = 3 且 number_filters = 输出深度 = 2)

在此输入图像描述