I have a problem with my current attempt to build a sequential model for time series classification in Keras. I want to work with channels_first
data, because it is more convenient from a perprocessing perspective (I only work with one channel, though). This works fine for the Convolution1D
layers I'm using, as I can specify data_sample='channels_first'
, but somehow this won't work for Maxpooling1D
, which doesn't have this option as it seems.
The model I want to build is structured as follows:
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
With window_length = 5000
I get the following summary after all three layers are added:
_________________________________________________________________
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
Now, I wonder if this is correct, as I would expect the third dimension (i.e. the number of neurons in a feature map) and not the second (i.e. the number of filters) to be reduced by the pooling layer? As I see it, MaxPooling1D
does not recognize the channels_first
ordering and while the Keras documentation says there exists a keyword data_format
for MaxPooling2D
, there's no such keyword for MaxPooling1D
.
I tested the whole setup with a channels_last
data format, and it worked as I expected. But since the conversion from channels_first
to channels_last
takes quite some time for me, I'd really rather have this work with channels_first
. And I have the feeling that I'm simply missing something.
If you need any more information, let me know.