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


18

我是神经网络的新手,但是我相当了解线性代数和卷积数学。

我试图理解我在网上各个地方找到的示例代码,用于训练带有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
这是由于了解了CNN的卷积部分。您可以在此处阅读: cs231n.github.io/convolutional-networks
Christian Safka

Answers:


15

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

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

其中是馈入该单元的单元数,是此结果馈入的单元数。ninnouŤ

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

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

转换网过滤器可视化

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


5
glorot_uniform不使用正态分布。我想你在描述glorot_normal。我认为答案并不重要-关键是随机初始化和培训效果。可能值得解释的是,经过训练的滤镜如何最终看起来像边缘/角等滤镜(可能带有训练第一层滤镜之前/之后的经典图像之一)。
尼尔·斯莱特

蒂姆,感谢您提供数学知识。@Neil Slater-您的见解对过滤器进行反向传播训练后可能看起来像边缘检测等很有帮助。如果我有更高的声誉,我将为您的两项捐款+1。
克里斯法(ChrisFal)'17年

@NeilSlater感谢您的评论-您是对的,我对glorot_normal和感到困惑glorot_uniform,并且我更新了答案以反映这一点。正如您所建议的,我还添加了一些有关过滤器如何结束的额外信息。
timleathart '17

6

AFkBk(i,j)

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

在此处输入图片说明

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


我理解了这种数学方法,但是我确信该线程的许多读者都会发现该图很有用。那谢谢啦!
ChrisFal

imghost.in/images/2018/03/06/XvatD.jpg也许图片的B上必须带有坐标(0,0)?
vinnitu

@vinnitu是的,的确如此。实际上,我还需要将B修改为Bk(i,j),(i = 0,1,2,j = 0,1,2)。
lucky6qi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.