我知道通常的 CNN 由卷积层和池化层组成。池化层使输出更小,这意味着计算量更少,并且它们还使其以某种方式变换不变,因此来自内核滤波器的特征的位置可以在原始图像中移动一点。
但是当我不使用池化层时会发生什么?原因可能是我想要原始图像中每个像素的特征向量,因此卷积层的输出必须与图像大小相同,只是有更多通道。这有意义吗?这些特征向量中是否还会有有用的信息,还是需要在 CNN 中使用池化层?还是有一些方法可以通过池化层获取单个像素的特征向量?
我知道通常的 CNN 由卷积层和池化层组成。池化层使输出更小,这意味着计算量更少,并且它们还使其以某种方式变换不变,因此来自内核滤波器的特征的位置可以在原始图像中移动一点。
但是当我不使用池化层时会发生什么?原因可能是我想要原始图像中每个像素的特征向量,因此卷积层的输出必须与图像大小相同,只是有更多通道。这有意义吗?这些特征向量中是否还会有有用的信息,还是需要在 CNN 中使用池化层?还是有一些方法可以通过池化层获取单个像素的特征向量?
早期和后期的卷积特征图包含很多有用的信息。许多有趣且有趣的应用程序完全基于来自预训练 CNN 的特征图,例如Google Deep Dream和Neural Style。预训练模型的一个常见选择是 VGGNet,因为它很简单。
另请注意,一些 CNN,例如All Convolutional Net,将池化层替换为卷积层。他们仍然通过跨步进行下采样,但完全避免了 maxpool 或 avgpool 操作。这个想法已经流行起来,并应用于许多现代 CNN 架构中。
唯一的困难是没有下采样的 CNN 可能更难训练。您需要足够的训练数据,其中标签是图像(我假设您有),并且您还需要一些聪明的损失函数来进行反向传播。当然,您可以从像素差的 L2 范数开始,但这实际上取决于您要解决的问题。
我的建议是采用现有的预训练 CNN(例如用于 tensorflow 的 VGGNet)并只保留前两个卷积层,直到第一次下采样。这是尝试这种架构的快速方法。