单层卷积网络和简单卷积网络示例

1 单层卷积网络(One layer of a convolutional network

假设经过两次卷积运算,最终各自形成一个卷积神经网络层,然后增加偏差(它是一个实数),通过线性函数( Python 的广播机制)给这 16 个元素都加上同一偏差,然后应用非线性激活函数 ReLU,输出结果是一个 4×4 矩阵,然后把这两个矩阵堆叠起来,这样就通过神经网络的一层把一个6×6×3 的维度a[0]演化为一个 4×4×2 维度的a[1],这就是卷积神经网络的一层。

但如果我们用了 10 个过滤器,而不是 2 个,我们最后会得到一个 4×4×10 维度的输出图像,因为我们选取了其中 10 个特征映射,而不仅仅是 2 个,将它们堆叠在一起,形成一个4×4×10 的输出图像,也就是a[1]。这样会有多少参数呢,我们来计算一下,每一层都是一个 3×3×3 的矩阵,因此每个过滤器有 27 个参数,也就是 27 个数。然后加上一个偏差,用参数b表示,现在参数增加到 28 个,又因为我们有 10 个,加在一起是 28×10,也就是 280 个参数。

2  简单卷积网络示例 A simple convolution network example

假设你有一张图片,你想做图片分类或图片识别,把这张图片输入定义为x,然后辨别图片中有没有猫,用 0 1 表示,这是一个分类问题,我们来构建适用于这项任务的卷积神经网络。针对这个示例,我用了一张比较小的图片,大小是 39×39×3,这样设定可以使其中一些数字效果更好。所以nH[0] = nW[0],即高度和宽度都等于 39nc[0] = 3,即 0 层的通道数为3。假设第一层我们用一个 3×3 的过滤器来提取特征因为过滤器时 3×3 的矩阵。s[1] = 1p[1] = 0,所以高度和宽度使用 valid 卷积。如果有 10 个过滤器,神经网络下一层的激活值为 37×37×10,写 10 是因为我们用了 10 个过滤器,这(37×37×10)是这一层激活值a[1]的维度。假设还有另外一个卷积层,这次我们采用的过滤器是 5×5 的矩阵,即f[2] = 5,步幅为 2,即s[2] = 2,因为步幅是 2,维度缩小得很快,大小从 37×37 减小到 17×17,减小了一半还多,过滤器是 20 个,所以通道数也是 2017×17×20 即激活值a[2]的维度。我们来构建最后一个卷积层,假设过滤器还是 5×5,步幅为 2,,最后输出为 7×7×40,假设使用了 40 个过滤器,最后结果为 7×7×40。到此,这张 39×39×3 的输入图像就处理完毕了,为图片提取了 7×7×40 个特征,计算出来就是 1960 个特征。然后对该卷积进行处理,可以将其平滑或展开成 1960 个单元,平滑处理后可以输出一个向量,其填充内容是 logistic 回归单元还是 softmax 回归单元,完全取决于我们是想做二分类(图片上有没有猫),还是想识别K种不同对象中的一种。这就是一个简单卷积网络示例。

一个典型的卷积神经网络通常有三层,一个是卷积层,我们常常用 Conv 来标注,一个是池化层,我们称之为 POOL。最后一个是全连接层,用 FC 表示。虽然仅用卷积层也有可能构建出很好的神经网络,但大部分神经望楼架构师依然会添加池化层和全连接层,池化层和全连接层比卷积层更容易设计。

posted @ 2021-07-27 20:46  zhang-X  阅读(171)  评论(0)    收藏  举报