Gre*_*l_f 7 python machine-learning conv-neural-network keras 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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
现在,我想知道这是否正确,因为我期望第三维(即特征图中的神经元数)而不是第二维(即过滤器的数量)被汇集层减少?在我看来,MaxPooling1D不承认channels_first订购和而Keras文档说存在一个关键词data_format的MaxPooling2D,有一个为没有这样的关键字MaxPooling1D.
我用channels_last数据格式测试了整个设置,它按照我的预期工作.但由于从转换channels_first到channels_last需要相当长的一段时间对我来说,我真的宁愿这项工作channels_first.我觉得我只是遗漏了一些东西.
如果您需要更多信息,请与我们联系.
更新:正如 @HSK 在评论中提到的,由于此 PR,data_format该参数现在得到了分层支持。MaxPooling
那么,一种替代方法是使用该Permute层(并删除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()
Run Code Online (Sandbox Code Playgroud)
型号总结:
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
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |