首页 > 编程知识 正文

keras自定义卷积层(keras实现卷积加lstm)

时间:2023-05-04 15:43:52 阅读:103795 作者:560

点击上面的,全在AI中国

我一直保持定期阅读ML和AI相关论文的习惯,这是了解该领域最新进展的唯一途径。作为一名计算机科学家,每当我浏览科学著作或数学公式时,经常会碰壁。在不断的试错中,我发现简单的代码可以降低理解的难度。因此,在本文中,我希望能帮助您了解Keras中最新架构的卷积块列表。

当jmdhy在GitHub上查找最新流行的架构时,您会惊讶于它们包含大量代码。因为它包含大量注释,并使用额外的参数来增强模型。然而,与此同时,这可能会分散我们对建筑本质的理解。为了进一步简化和缩短代码片段,作者将使用一些alias()函数:

作者发现,删除模板代码后,代码的可读性要高得多。当然,前提是你理解这些代码的缩写。我们开始吧。

瓶颈块

卷积层参数的数量取决于内核大小、输入滤波器的数量和输出滤波器的数量。你的网络越广,3x3卷积的成本就越高。

瓶颈块的核心思想是保证速率r使用更便宜的1x1卷积来减少通道数,从而使后面的3x3卷积参数更少。最后,我们使用另一个1x1卷积来扩展网络。

初始模块

初始模块引入了并行使用不同操作和组合结果的思想。这样,网络可以学习不同类型的过滤器。

这里,我们使用内核大小为1、3和5的卷积层,它们与MaxPooling层合并。这个片段是事件模块的一个简单应用。实际上,我们更有可能将它的瓶颈块组合起来用于更复杂的应用程序。

残留块

ResNet是微软研究人员引入的架构,它不仅允许神经网络有很多层,还提高了模型的准确性。你现在可能已经习惯了ResNet,但是在ResNet出现之前情况就不一样了。

其思想是将初始激活添加到卷积块的输出中。这样,网络可以通过学习过程确定输出中有多少新的卷积。请注意,事件模块连接输出,而残差块添加输出。

ResNeXt块

根据它的名字,可以猜测ResNeXt和ResNet关系密切。作者将术语“基数”作为另一个维度引入卷积块,如宽度(通道数)和深度(层数)。

基数是指一个块中出现的并行路径的数量。这听起来类似于事件阻止,它同时包含四个操作。然而,与并行使用不同类型的操作不同,基数4意味着同一操作运行4次。

如果他们做同样的事情,为什么他们要平行?这与块卷积的概念有关。最早可以追溯到AlexNet的论文。虽然当时主要用于将训练过程拆分成多个GPU,但ResNeXt利用它们来提高参数的效率。

p>

这样做的目的是把所有的输入信道分成几个组。卷积只会在固定的信道中起作用,而不是"跨越"所有信道。研究发现,在提高权重效率的同时,每一组都会学习不同类型的特征。

假设有一个bottleneck block,首先使用速率4将256个输入信道减少到64个,然后将它们恢复到256个信道作为输出。如果我们想引入一个32的基数和一个2的压缩,我们将使用32个1x1的卷积层并与4个(256 /(32*2))输出信道并行。然后我们使用32个3x3的卷积层,4个输出信道,然后是32个1x1的卷积层,每个层有256个输出信道。最后一步是添加32条并行路径,在添加初始输入以创建残差连接之前,给出单个输出。

这有很多东西需要消化。通过上面的图像步骤使正在发生的事情以可视化的形式表示出来,或者复制这些代码片段,在Keras中自己构建一个小的网络。把作者这种复杂的描述概括在这9行简单的代码中,这不是很棒吗?

顺便说一下,如果基数等于信道数,我们会得到深度可分离卷积。自引入Xception体系结构以来,它们得到了越来越多人的关注。

稠密块

稠密块是残差块的一个极端"版本",每个卷积层都得到块中所有先前卷积层的输出。首先,我们将输入激活添加到一个列表中,然后开始循环,这个循环需要深入到卷积块中。每个卷积输出也被连接到列表中,以便随着迭代得到越来越多的输入特性映射。该方案一直持续到达到预期的深度为止。

虽然要花几个月的研究才能找到一个和DenseNet一样的体系架构,但是实际构建中如此简单的确令人欣喜。

Squeeze-and-Excitation块

在短时间内,Senet一直是ImageNet上最先进的技术。它建立在ResNext之上,并专注于对网络的信道信息进行建模。在常规的卷积层中,每个信道在点积运算中对加法操作的权重相同。

SENet介绍了一个非常简单的模块,可以添加到任何现有的体系结构中。它创建了一个小的神经网络,它了解了每个滤波器应该如何根据输入来加权。正如你所看到的,它本身并不是一个卷积块,但是因为它可以被添加到任何卷积块中,并可能提高它的性能,所以我们想把它添加到卷积块中。

每个信道被压缩成一个单独的值,并输入到一个双层神经网络中。根据信道的分布情况,神经网络会对信道的重要性进行衡量。最后,权重将与卷积激活相乘。

SENets引入了一个微小的计算开销,同时改进了卷积模型。在作者看来,它值得更多人的关注。

NASNet Normal Cell

我们给人们留下了一个简单而有效的设计决策的空间,并进入了一个设计神经网络体系结构的世界。Nasnet给人是一种简单的感觉,但实际的架构是相对复杂的。我们所知道的是,它在ImageNet上运行得非常好。

作者着手定义了不同类型的卷积层和池化层的搜索空间,每个层可能设置都各不相同。同时还定义了如何以并行的或依次的方式排列这些层,以及如何添加或连接这些层。一旦定义好了,他们就建立了一个基于递归神经网络的强化学习算法(RL),如果某一个特定的设计方案在CIFAR-10数据集上表现良好,该算法就会得到"奖励"。

由此产生的体系架构不仅在CIFAR-10上表现良好,而且在ImageNet上也取得了最先进的结果。NASNet由Normal Cell和 Reduction Cell 组成,它们相互重复。

这就是如何在Keras中实现Normal Cell。除了层和设置的完美结合之外,没有什么新东西。

反向残差块

到目前为止,你已经听说过bottleneck block和可分离卷积。让我们把它们放在一起。如果你运行一些测试,你将注意到,由于可分离卷积已经减少了参数的数量,压缩它们可能会损害性能,而不是增加性能。

作者提出了与bottleneck residual block相反的想法。它们使用廉价的1x1卷积来增加信道数,因为下面的可分离卷积层已经大大减少了参数的数量。在将其添加到初始激活之前,它会关闭信道。

这个难题的最后一部分是可分离卷积后面没有激活函数。相反,它直接添加到输入中。这个块在放入架构时非常有效。

AmoebaNet Normal Cell

通过AmoebaNet,我们就可以了解到ImageNet上的最新技术,可能还有图像识别技术。和Nasnet一样,它是由一种算法设计的,使用的搜索空间和以前一样。唯一的问题是,他们把强化学习算法换成了遗传算法。深入了解这一工作原理的细节超出了本文的范围。最后,作者找到了一个比NASNet更好的解决方案,而且计算成本更低。它在ImageNet上的准确率达到了97.87%,这在单个架构中还是第一次。

结论

作者希望这篇文章能让你对重要的卷积块有一个深刻的理解,并且实现它们可能比你想象的要容易。要更详细地了解这些架构,请查看各自的论文。你会注意到,一旦你掌握了论文的核心理念,就会更容易理解其余部分。还请注意,现实中通常会将BatchNormalization添加到mix 中,并且在应用激活函数的位置方面会有所不同。

作者:Paul-Louis Pröve

编译出品

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。