CNN 的自动编码器 - 减少或增加过滤器?

Posted

技术标签:

【中文标题】CNN 的自动编码器 - 减少或增加过滤器?【英文标题】:Autoencoder of CNN - decrease or increase filters? 【发布时间】:2021-12-31 18:11:54 【问题描述】:

在基于 CNN 的自动编码器中,您会增加还是减少层之间的过滤器数量?当我们压缩信息时,我正在考虑减少。

这里是编码器部分的示例,其中过滤器的数量在每个新层都减少了,从 16 到 8 到 4。

x = Conv2D(filters = 16, kernel_size = 3, activation='relu', padding='same', name='encoder_1a')(inputs)
x = MaxPooling2D(pool_size = (2, 2), padding='same', name='encoder_1b')(x)

x = Conv2D(filters = 8, kernel_size = 3, activation='relu', padding='same', name='encoder_2a')(x)
x = MaxPooling2D(pool_size = (2, 2), padding='same', name='encoder_2b')(x)

x = Conv2D(filters = 4, kernel_size = 3, activation='relu', padding='same', name='encoder_3a')(x)
x = MaxPooling2D(pool_size = (2, 2), padding='same', name='encoder_3b')(x)

【问题讨论】:

【参考方案1】:

随着编码器中层数的增加,滤波器大小并不总是会减小或增加。在我见过的卷积自动编码器架构的大多数编码器示例中,高度和宽度通过跨步卷积或池化而减小,并且层的深度增加(过滤器大小增加),保持与上一个相似或随着编码器中的每个新层而变化.但也有一些例子,输出通道或过滤器大小随着层数的增加而减小。

通常,自动编码器将输入编码为潜在表示/向量或嵌入,其维度低于输入,从而最大限度地减少重构误差。所以以上两种方法都可以通过改变内核大小、层数、在编码器末尾添加一个具有特定维度的额外层等来创建undercomplete autoencoder。

过滤器增加示例

在下图中,随着在编码器中添加更多层,过滤器大小会增加。但是由于输入28*28*1 = 784 维度特征和扁平表示3*3*128 = 1152 更多,所以在最后一层之前添加了另一层,即嵌入层。它通过全连接网络中预定义的输出数量来减少特征维度。即使是最后一个密集/全连接层也可以通过改变层数或内核大小来替换,以获得输出(1, 1, NUM_FILTERS)

过滤器减少示例

可以在keras convolutional autoencoder 示例中找到随着层数增加而在编码器中减少过滤器的简单示例,就像您的代码一样。

import keras
from keras import layers

input_img = keras.Input(shape=(28, 28, 1))

x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)

参考文献

https://www.deeplearningbook.org/contents/autoencoders.html https://xifengguo.github.io/papers/ICONIP17-DCEC.pdf https://blog.keras.io/building-autoencoders-in-keras.html

【讨论】:

以上是关于CNN 的自动编码器 - 减少或增加过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

CNN 的过滤器是如何学习的?

深度学习-conv卷积

为啥不同的机器学习领域都可以使用CNN,CNN解决了这些领域的哪些共性问题?是如何解决的?

添加视频过滤器以直接显示项目

在 javascript 中过滤一个对象对象(过滤或减少?)

减少或删除过滤器文本后,使用过滤器不会重置视图