我注意到,在keras
文档中,有许多不同类型的Conv
层,即Conv1D
,Conv2D
,Conv3D
。
所有参数都具有filters
,kernel_size
,strides
和padding
之类的参数,这些参数在其他keras
层中不存在。>
我看过这样的图像,它们“可视化” Conv
层,
但是我不明白从一层到下一层的过渡过程。
更改上述参数和Conv
层的尺寸如何影响模型中发生的事情?
答案 0 :(得分:3)
卷积-语言不可知的基础
要了解卷积如何在喀拉拉邦工作,我们需要对卷积如何在语言不可知的环境中进行基本了解。
卷积层在输入上滑动以构建激活图(也称为要素图)。以上是2D卷积的示例。请注意,在每个步骤中,3 X 3深色正方形如何在输入上滑动(蓝色),并针对其分析的输入的每个新3 x 3部分,在输出激活图中输出一个值(最佳)。
内核和过滤器
黑色方块是我们的kernel
。 kernel
是权重矩阵,乘以我们输入的每个部分。这些乘法运算的所有结果加在一起构成了我们的激活图。
直观地讲,我们的kernel
使我们可以重用参数-在图像的此部分中检测到眼睛的权重矩阵将在其他位置检测到它;当kernel
可以遍及所有地方工作时,为输入的每个部分训练不同的参数毫无意义。我们可以将每个kernel
视为一个功能的功能检测器,并将其输出激活图作为该功能在输入的每个部分中出现的可能性的图。
kernel
的同义词是filter
。参数filters
要求该kernels
层中的Conv
(特征检测器)数量。此数字也将是输出中最后一个尺寸的大小,即filters=10
将导致输出形状为(???, 10)
。这是因为每个Conv
层的输出是一组激活图,并且将有filters
个激活图。
内核大小
kernel_size
很好,每个内核的大小。前面我们讨论过,每个kernel
都由一个权重矩阵组成,该矩阵经过调整可以更好地检测某些特征。 kernel_size
决定了滤镜的大小。用英语,在每个卷积过程中要处理多少“输入” 。例如,我们上面的图表每次处理3 x 3的输入块。因此,它具有kernel_size
的{{1}}。我们也可以将上述操作称为“ 3x3卷积”
较大的内核大小几乎不受它们表示的功能的约束,而较小的内核则限于特定的低级功能。但是请注意,较小内核大小的多层可以模拟较大内核大小的效果。
大步
请注意我们上面的(3, 3)
每次如何移动两个单位。 kernel
每次计算的“移位”量称为kernel
,因此在strides
中说我们的keras
。一般来说,随着strides=2
数量的增加,由于激活图具有“空白”,我们的模型会从一层到另一层丢失更多信息。
填充
回到上图,请注意输入周围的白色正方形环。这是我们的strides
。不使用填充,每次我们将输入通过padding
层时,结果的形状就会越来越小。结果,我们Conv
的输入带有零环,这有几个用途:
保留边缘信息。从我们的图表中注意到,每个角白色正方形仅经历一次卷积,而中心正方形经历了四次。添加填充可缓解此问题-最初位于边缘的正方形会卷积更多次。
pad
是一种控制输出形状的方法。通过使每个padding
层的输出具有与输入相同的形状,可以使形状更易于使用,并且当每次使用{{1 }}层。
Conv
提供了三种不同类型的填充。文档中的解释非常简单,因此可以在此处进行复制/解释。这些通过Conv
传递,即keras
。
padding=...
:无填充
padding="valid"
:对输入进行填充,以使输出具有与原始输入相同的长度
valid
:导致因果关系(径向卷积)。通常,在上图中,内核的“中心”映射到输出激活映射中的值。因果卷积使用右边缘代替。这对于临时数据非常有用,在临时数据中您不想使用将来的数据来对当前数据建模。
Conv1D,Conv2D和Conv3D
直观地讲,这些层上发生的操作保持不变。每个same
仍会在您的输入中滑动,每个causal
会为其自身的功能输出激活图,并且kernel
仍会应用。
差异是卷积的维数。例如,在filter
中,一维padding
沿一个轴滑动。在Conv1D
中,二维kernel
在两个轴上滑动。
非常重要的一点是,X-D Conv图层中的D并不表示输入的维数,而是表示内核滑动的轴数。
例如,在上图中,即使输入是3D(具有RGB通道的图像),这也是Conv2D
图层的示例。这是因为存在两个空间维度-kernel
,并且过滤器仅沿这两个维度滑动。您可以认为这在空间维度上是卷积的,在通道维度上是完全连接的。
每个过滤器的输出也是二维的。这是因为每个过滤器都在二维中滑动,从而创建了二维输出。结果,您还可以将N-D Conv2D
视为每个输出N-D向量的滤波器。
使用(rows, cols)
可以看到相同的内容(如上图所示)。当输入为二维时,过滤器仅沿一个轴滑动,从而使其成为一维卷积。
在Conv
中,这意味着Conv1D
将要求每个样本都具有keras
尺寸-ConvND
尺寸,以便过滤器可以滑过,另外还有一个{{1} }维度。
TLDR-Keras总结
N+1
:图层中不同N
的数量。每个channels
都会检测并输出特定功能的激活图,使其成为输出形状中的最后一个值。即filters
输出kernels
。
kernel
:确定每个Conv1D
/ (batch, steps, filters)
/功能检测器的尺寸。还确定要使用多少输入来计算输出中的每个值。更大的尺寸=检测更复杂的特征,更少的约束;但是它很容易过拟合。
kernel_size
:要进行下一次卷积需要移动多少个单位。 kernel
越大=丢失的信息越多。
filter
:strides
,strides
或padding
。确定是否以及如何用零填充输入。
"valid"
:表示内核滑动的轴数。一个N-D "causal"
层将为每个滤波器输出一个"same"
输出,但是每个样本都需要一个N + 1维输入。这是由1D vs 2D vs 3D
到另一边的尺寸以及另外一个Conv
尺寸组成的。
参考文献:
Intuitive understanding of 1D, 2D, and 3D Convolutions in Convolutional Neural Networks