Python 卷积层(CNN)如何在KERA中工作?
我注意到在Python 卷积层(CNN)如何在KERA中工作?,python,keras,neural-network,conv-neural-network,Python,Keras,Neural Network,Conv Neural Network,我注意到在keras文档中有许多不同类型的Conv层,即Conv1D,Conv2D,Conv3D 它们都有一些参数,如过滤器,内核大小,步幅,以及填充,这些参数在其他keras层中不存在 我见过这样的图像,它们“可视化”了Conv层 但我不明白在从一层到下一层的过渡过程中发生了什么 更改上述参数和我们的Conv层的维度如何影响模型中发生的事情?卷积-语言不可知基础 为了理解在keras中卷积是如何工作的,我们需要基本了解卷积在语言不可知的环境中是如何工作的 卷积层在输入上滑动以构建激活映射(
keras
文档中有许多不同类型的Conv
层,即Conv1D
,Conv2D
,Conv3D
它们都有一些参数,如过滤器
,内核大小
,步幅
,以及填充
,这些参数在其他keras
层中不存在
我见过这样的图像,它们“可视化”了Conv
层
但我不明白在从一层到下一层的过渡过程中发生了什么
更改上述参数和我们的
Conv
层的维度如何影响模型中发生的事情?卷积-语言不可知基础
为了理解在keras中卷积是如何工作的,我们需要基本了解卷积在语言不可知的环境中是如何工作的
卷积层在输入上滑动以构建激活映射(也称为特征映射)。上面是2D卷积的一个示例。请注意,在每一步中,3 X 3的深色方块是如何在输入(蓝色)上滑动的,对于它分析的输入的每一个新的3 X 3部分,它会在我们的输出激活图中输出一个值(顶部的蓝绿色框)
内核和过滤器
暗方是我们的内核
。内核
是一个权重矩阵,它与输入的每个部分相乘。所有这些乘法的结果一起构成了我们的激活图
直观地说,我们的内核
允许我们重用参数——在图像的这一部分检测眼睛的权重矩阵将用于在其他地方检测眼睛;当一个内核可以横扫并在任何地方工作时,为输入的每个部分训练不同的参数是没有意义的。我们可以将每一个<代码>内核<代码>作为一个特征的特征检测器,并且它是输出激活映射,作为该特征在输入的每个部分中存在的可能性的映射。
kernel
的同义词是filter
。参数filters
询问Conv
层中的内核数
(特征检测器)。此数字也将是输出中最后一个维度的大小,即过滤器=10
将导致输出形状为(?,10)
。这是因为每个Conv
层的输出是一组激活映射,并且将有过滤器
数量的激活映射
内核大小
kernel\u size
是每个内核的大小。我们在前面讨论过,每个内核都由一个权重矩阵组成,该矩阵经过调整以更好地检测某些特征<代码>内核大小
指定过滤器掩码的大小。在英语中,每次卷积过程中处理多少“输入”。例如,我们上面的图表每次处理一个3x3的输入块。因此,它的内核大小为(3,3)
。我们也可以将上述操作称为“3x3卷积”
较大的内核大小在它们所表示的特性中几乎不受限制,而较小的内核大小仅限于特定的低级特性。但是请注意,多个小内核大小的层可以模拟较大内核大小的效果
跨步
注意上面的内核每次移动两个单位。每次计算的内核
“移位”量称为步长
,因此在keras
中,我们的步长=2
。一般来说,随着步数的增加
,我们的模型从一层到下一层丢失了更多的信息,因为激活图有“间隙”
填充
回到上图,注意我们输入的周围有一圈白色的正方形。这是我们的填充
。没有填充,每次我们通过Conv
层传递输入时,结果的形状就会越来越小。因此,我们pad
用一个零环填充我们的输入,这有几个用途:
保留边缘周围的信息。从我们的图表中可以看出,每个角白色正方形只经过一次卷积,而中心正方形经过四次卷积。添加填充可以缓解这个问题-原来在边上的正方形会被卷积更多次
填充
是控制输出形状的一种方法。通过保持每个Conv
层的输出与输入的形状相同,我们可以使形状更易于使用,并且当我们使用Conv
层时形状不会变小时,我们可以制作更深的模型
keras
提供三种不同类型的填充。文件中的解释非常简单,因此在此处复制/解释。它们是通过padding=…
传入的,即padding=“valid”
有效
:无填充
same
:填充输入,使输出与原始输入具有相同的长度
因果
:导致因果(拨号卷积)。通常在上图中,内核的“中心”映射到输出激活映射中的值。对于因果卷积,使用右边缘代替。这对于时态数据很有用,因为您不想使用未来数据来建模当前数据
Conv1D、Conv2D和Conv3D
直观上,这些层上发生的操作保持不变。每个内核
仍然在您的输入中滑动,每个过滤器
输出其自身功能的激活映射,并且仍然应用填充
差异是卷积的维度数。例如在Conv1D
a中