1×1 卷积和Inception 网络

 1.1 1×1 卷积(Network in Network and 1×1 convolutions

输入一张 6×6×1 的图片,然后对它做卷积,起过滤器大小为 1×1×1,结果相当于把这个图片乘以数字 2,但这仅仅是对于6×6×1 的一个通道图片来说,1×1 卷积效果不佳。如果是一张 6×6×32 的图片,那么使用 1×1 过滤器进行卷积效果更好,具体来说,1×1 卷积所实现的功能是遍历这 36 个单元格,计算左图中 32 个数字和过滤器中 32 个数字的元素积之和,然后应用 ReLU 非线性函数。我们以其中一个单元为例,它是这个输入层上的某个切片,用这 36 个数字乘以这个输入层上 1×1 切片,得到一个实数,像这样把它画在输出中。这个 1×1×32 过滤器中的 32 个数字可以这样理解,一个神经元的输入是 32 个数字,即相同高度和宽度上某一切片上的 32个数字,这 32 个数字具有不同通道,乘以 32 个权重(将过滤器中的 32 个数理解为权重),然后应用 ReLU 非线性函数,在这里输出相应的结果。所以 1×1 卷积可以从根本上理解为对这 32 个不同的位置都应用一个全连接层,全连接层的作用是输入 32 个数字(过滤器数量标记为nc[l+1],在这 36 个单元上重复此过程),输出结果是 6×6×#filters(过滤器数量),以便在输入层上实施一个非平凡(non-trivial)计算。

 

 

 1.2  Inception 网络简介

构建卷积层时,你要决定过滤器的大小究竟是 1×1,,3×3 还是 5×5,或者要不要添加池化层。而 Inception 网络的作用就是代替你来决定,虽然网络架构因此变得更加复杂,但网络表现却非常好。

这是你 28×28×192 维度的输入层,Inception 网络或 Inception 层的作用就是代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层。如果使用 1×1 卷积,输出结果会是 28×28×#(某个值),假设输出为 28×28×64,并且这里只有一个层。如果使用 3×3 的过滤器,那么输出是 28×28×128。然后我们把第二个值堆积到第一个值上,为了匹配维度,我们应用 same 卷积,输出维度依然是 28×28,和输入维度相同,即高度和宽度相同。如果用 5×5 过滤器或许会更好,输出变成 28×28×32,我们再次使用 same 卷积,保持维度不变。如果你不想要卷积层,那就用池化操作,得到一些不同的输出结果,我们把它也堆积起来,这里的池化输出是 28×28×32。为了匹配所有维度,我们需要对最大池化使用 padding,它是一种特殊的池化形式,因为如果输入的高度和宽度为 28×28,则输出的相应维度也是28×28。然后再进行池化,padding 不变,步幅为 1

 

有了这样的 Inception 模块,你就可以输入某个量,因为它累加了所有数字,这里的最终输出为 32+32+128+64=256Inception 模块的输入为 28×28×192,输出为 28×28×256。这就是 Inception 网络的核心内容

 

1.3 Inception 网络(Inception network

Inception 模块会将之前层的激活或者输出作为它的输入,作为前提,这是一个28×28×192 的输入,先通过一个 1×1的层,再通过一个 5×5 的层,1×1 的层可能有 16 个通道,而 5×5 的层输出为 28×28×32,共32 个通道。为了在这个 3×3 的卷积层中节省运算量,你也可以做相同的操作,这样的话 3×3 的层将会输出 28×28×128。或许你还想将其直接通过一个 1×1 的卷积层,这时就不必在后面再跟一个 1×1 的层了,这样的话过程就只有一步,假设这个层的输出是 28×28×64。最后是池化层。为了能在最后将这些输出都连接起来,我们会使用 same类型的 padding 来池化,使得输出的高和宽依然是 28×28,这样才能将它与其他输出连接起来,在这过程中,把得到的各个层的通道都加起来,最后得到一个 28×28×256 的输出,这就是一个 Inception 模块。

 

Inception 网络所做的就是将这些模块都组合到一起,最后组成了网络。

 

posted @ 2021-07-29 15:06  zhang-X  阅读(295)  评论(0)    收藏  举报