Keras Convolution2d() 使用的默认过滤器是什么?

数据挖掘 喀拉斯 卷积神经网络
2021-09-15 21:51:30

我对神经网络很陌生,但我对线性代数和卷积数学的理解相当不错。

我试图理解我在网上各个地方找到的示例代码,用于训练带有 MNIST 数据的 Keras 卷积 NN 以识别数字。我的期望是,当我创建一个卷积层时,我必须指定一个过滤器或一组过滤器以应用于输入。但是我发现的三个样本都创建了一个像这样的卷积层:

model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
                        border_mode='valid',
                        input_shape=input_shape))

这似乎将总共 32 个 3x3 过滤器应用于 CNN 处理的图像。但是那些过滤器是什么?我将如何在数学上描述它们?keras 文档没有帮助。

提前致谢,

2个回答

默认情况下,过滤器 W使用该glorot_uniform方法随机初始化,该方法从具有正负边界的均匀分布中提取值,如下所述:

WU(6nin+nout,6nin+nout),

在哪里 nin 是输入该单元的单元数,以及 nout 是这个结果被馈送到的单元数。

当您使用网络进行预测时,这些过滤器将应用于网络的每一层。也就是说,对每个输入图像上的每个滤波器执行离散卷积,并将这些卷积的结果馈送到下一层卷积(或全连接层,或您可能拥有的任何其他层)。

在训练期间,过滤器中的值通过关于损失函数的反向传播进行优化。对于识别数字等分类任务,通常使用交叉熵损失。这是在卷积网络的第一层(顶部)和第二层(底部)学习的过滤器的可视化:

卷积网络过滤器可视化

如您所见,第一层过滤器基本上都充当简单的边缘检测器,而第二层过滤器更复杂。随着您深入网络,过滤器能够检测到更复杂的形状。不过,可视化有点棘手,因为这些过滤器作用于已经经过多次卷积的图像,并且可能看起来不太像原始的自然图像。

它们是卷积核。例如你的形象A是 5x5,你有 32 个 3x3 卷积核Fk. border_mode 为“有效”,这意味着输入周围没有填充,因此像素 (i,0),(0,j),(i,4),(4,j) 丢失。因此,您的结果是 32 个 3x3 图像Bk(i,j), (i=1,2,3,j=1,2,3),每个结果图像由卷积定义:

Bk(i,j)=(FkA)(i,j)=l=0,1,2m=0,1,2Fk(l,m)A(il,jm)

在此处输入图像描述

训练后的模型将根据您的成本函数训练内核,最终这些内核是您模型的过滤器。