我目前尝试在Keras中为时间序列分类构建顺序模型时遇到问题.我想使用channels_first数据,因为从处理的角度来看它更方便(不过我只使用一个通道).这适用于我正在使用的Convolution1D图层,因为我可以指定data_sample =’channels_first’,但不知何故这对Maxpooling1D不起作用,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排序,而Keras documentation表示MaxPooling2D存在关键字data_format,MaxPooling1D没有这样的关键字.
我使用channels_last数据格式测试了整个设置,它按预期工作.但是因为从channels_first转换为channels_last需要花费相当长的时间,所以我真的宁愿使用channels_first.我觉得我只是遗漏了一些东西.
如果您需要更多信息,请与我们联系.