在某些情况下,省略细胞神经网络中的池化层是否有意义



我知道通常的CNN由卷积层和池化层组成。池化层使输出更小,这意味着更少的计算,并且它们也使其在某种程度上变换不变,因此来自内核滤波器的特征的位置可以在原始图像中稍微移动。

但是当我不使用池化层时会发生什么呢?原因可能是我想要原始图像中每个像素的特征向量,所以卷积层的输出必须与图像大小相同,只是有更多的通道。这有道理吗?这些特征向量中还会有有用的信息吗?或者在细胞神经网络中设置池化层是必要的吗?或者有没有一些方法可以通过池化层获得单个像素的特征向量?

卷积特征图,早期和后期的特征图,包含许多有用信息。许多有趣的应用程序都是基于预先训练的细胞神经网络的特征图,例如Google Deep Dream和Neural Style。预训练模型的一个常见选择是VGGNet,因为它很简单。

还要注意的是,一些CNN,例如All Convolutional Net,用卷积层取代了池化层。它们仍然通过跨步进行下采样,但完全避免了maxpool或avgpool操作。这个想法已经流行起来,并应用于许多现代CNN架构中。

唯一的困难是,没有下采样的CNN可能更难训练。你需要足够的训练数据,其中标签是图像(我想你已经有了),你还需要一些巧妙的反向传播损失函数。当然,你可以从像素差的L2范数开始,但这实际上取决于你要解决的问题。

我的建议是采用现有的预训练CNN(例如,tensorflow的VGGNet),只保留前两个卷积层,直到第一次下采样。这是一种尝试这种架构的快速方法。

Q1)我想拥有图像中每个像素的特征。

答:图像像素通常高度协同,从每个像素中提取特征几乎从来都没有用,因此,查看pooing的一个重要方法是补偿zitter。但话虽如此,这根本没有必要。

Q2:这些特征向量中会有有用的信息吗?

答:我们通常会使图像的高度和宽度在层下更小,并增加通道,原因是作为层输出的高度x宽度越大,空间信息就越明确。因此,使每一层的输出在通道中更深但在大小上更小使得其松散空间信息,并且具有独立于位置的更语义适当的编码。比如识别图像是否有猫不应该取决于猫在哪里或猫的大小。但存在猫的特征,如耳朵的图案、颜色图案、皮毛等

但你可以通过一个步长>的卷积来对不太相关的像素进行同样的采样;1.

我们的主要想法是使图像中包含的信息流与网络中的信息流相同,但具有较小尺寸的更深层次表示。

此外,该应用程序也有很大的不同,比如去噪需要你准确地构建图像,因此你在重建时只能变得有多小。

分类会使图像映射变平,因此需要单独考虑。

还请注意,整个CNN的图像图中的信息量可以保持原样(HxWxchannels),并且可以在减少/增加乘数的同时保持乘积不变。

最后一行,获取单个像素的特征向量对我来说没有多大意义。像素本身就是一些低级别的特征,通常我们感兴趣的是获取像素集合的高级别特征。如果你想更好地保留像素特征,只需使用像素值。还是我错过了什么?

相关内容

最新更新