当 cnn 中的多个过滤器进行卷积时,深度通道会发生什么(keras,tensorflow)

数据挖掘 机器学习 喀拉斯 张量流 时间序列 美国有线电视新闻网
2021-10-10 19:18:30

我有一个 15-我想使用卷积的通道时间序列 1dCNN (1×n时间步内核)。现在,假设我想拥有,作为我的第一层,16过滤器。在我看来,这意味着输出的深度为16×15=240,因为每个过滤器都将独立应用于每个通道。但是,当我在 keras 中实现此功能时,(使用 Sequential)摘要中的过滤器尺寸并未反映这一点。这是一个代码片段:

TIME_RANGE = 31
NUMBER_OF_CHANNELS = 15

model = Sequential()
model.add(Conv1D(input_shape = (TIME_RANGE, NUMBER_OF_CHANNELS),
                    filters=16,
                    kernel_size=7,
                    padding='valid',
                    data_format='channels_last'))
model.add(ReLU())
model.add(BatchNormalization())

model.add(Conv1D(   filters=32,
                    kernel_size=5,
                    padding='valid'))

这是相应的摘要输出:

Layer (type)                 Output Shape              Param #

==================================================== ================

conv1d_1 (Conv1D)            (None, 25, 16)            1696

re_lu_1 (ReLU)               (None, 25, 16)            0

batch_normalization_1 (Batch (None, 25, 16)            64

conv1d_2 (Conv1D)            (None, 21, 32)            2592

如您所见,由于无填充参数,输出沿时间轴的形状按预期减小,从312521,但深度只反映了过滤器的数量——那么我所有的频道都去了哪里?在架构的这一点上,我期待深度15×16×32=7680. 似乎是隐含的1×1卷积发生在某处,我认为我实际上并不想要——我想做我的1×1稍后在网络中进行卷积。那么我在这里错过了什么?

2个回答

好吧,我已经想通了。我需要使用深度卷积。在 tensorflow/keras 中,这是使用 DepthwiseConv2D 实现的。depth_multiplier 参数将为每组输入通道创建一组新通道,因此深度倍数为 16 的 15 个输入通道将创建 240 个输出通道(而不仅仅是 16 个)。

因为我正在处理一维信号,所以我只需将内核高度设为 1。还有一个额外的输入维度也需要为 1。

这是一个片段:

TIME_RANGE = 31
NUMBER_OF_CHANNELS = 15

from keras.layers import DepthwiseConv2D

model = Sequential()
model.add(DepthwiseConv2D(input_shape = (1, TIME_RANGE, NUMBER_OF_CHANNELS),                    
                    kernel_size=(1, 7),      # height 1,  width 7  (ostensibly 1D)
                    depth_multiplier = 16,
                    activation = 'elu',
                    padding = 'valid'))

希望这对将来的其他人有所帮助。

顺便说一句,我从这个有用的博客页面获得了正确的信息: https ://eli.thegreenplace.net/2018/depthwise-separable-convolutions-for-machine-learning/

当您的图像尺寸为 HxWxC 并应用滤波器大小为 F 和内核大小为 KxK 的卷积层时,您将在图像上滑动 F 个不同的 KxKxC 内核,导致总操作的输出维度为 H'xW'xF这就是你所看到的。