具有Maxpooling1D和channel_first的Keras模型

时间:2018-08-22 07:48:16

标签: python machine-learning keras conv-neural-network max-pooling

我目前在尝试为Keras中的时间序列分类建立顺序模型时遇到问题。我想使用channels_first数据,因为从每个处理的角度来看,它更方便(不过,我只使用一个通道)。正如我可以指定的Convolution1D那样,这对于我正在使用的data_sample='channels_first'层来说效果很好,但是对于Maxpooling1D来说似乎不起作用,因为model = Sequential() model.add(Convolution1D(filters=16, kernel_size=35, activation='relu', input_shape=(1, window_length), data_format='channels_first')) model.add(MaxPooling1D(pool_size=5) model.add(Convolution1D(filters=16, kernel_size=10, activation='relu', data_format='channels_first')) [...] #several other layers here 似乎没有此选项。

我要构建的模型的结构如下:

window_length = 5000

使用_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv1d_1 (Conv1D) (None, 32, 4966) 1152 _________________________________________________________________ max_pooling1d_1 (MaxPooling1 (None, 4, 4966) 0 _________________________________________________________________ conv1d_2 (Conv1D) (None, 16, 4957) 656 ================================================================= Total params: 1,808 Trainable params: 1,808 Non-trainable params: 0 ,在添加了所有三层后,我得到以下摘要:

MaxPooling1D

现在,我想知道这是否正确,因为我希望池化层减少三维空间(即特征图中神经元的数量)而不是二维空间(即过滤器的数量)?如我所见,channels_first无法识别data_format的顺序,尽管Keras documentation说存在MaxPooling2D的关键字MaxPooling1D,但没有这样的关键字channels_last

我使用channels_first数据格式测试了整个设置,并且按预期工作。但是,由于从channels_lastchannels_first的转换对我来说要花费相当长的时间,因此我真的希望与 [somecol] like "%sometext%" 一起工作。而且我有一种感觉,我只是想念一些东西。

如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:4)

更新as mentioned by @HSK in the comments,由于this PRdata_format层现在支持MaxPooling层。


好吧,一种选择是使用Permute层(并在第二个conv层中删除channels_first):

model = Sequential()
model.add(Convolution1D(filters=16, kernel_size=35, activation='relu', input_shape=(1, 100), data_format='channels_first'))
model.add(Permute((2, 1)))
model.add(MaxPooling1D(pool_size=5))
model.add(Convolution1D(filters=16, kernel_size=10, activation='relu'))

model.summary()

模型摘要:

Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_7 (Conv1D)            (None, 16, 66)            576       
_________________________________________________________________
permute_1 (Permute)          (None, 66, 16)            0         
_________________________________________________________________
max_pooling1d_2 (MaxPooling1 (None, 13, 16)            0         
_________________________________________________________________
conv1d_8 (Conv1D)            (None, 4, 16)              2096      
=================================================================
Total params: 2,672
Trainable params: 2,672
Non-trainable params: 0
_________________________________________________________________