区别:
**
1.GlobalMaxPooling1D:
**
在steps维度(也就是第二维)对整个数据求最大值。
比如说输入数据维度是[10, 4, 10],那么进过全局池化后,输出数据的维度则变成[10, 10]。
**
2.MaxPooling1D:
**
也是在steps维度(也就是第二维)求最大值。但是限制每一步的池化的大小。 比如,输入数据维度是[10, 4, 10],池化层大小pooling_size=2,步长stride=1,那么经过MaxPooling(pooling_size=2, stride=1)后,输出数据维度是[10, 3, 10]。
k_input = keras.Input(shape=(config.max_seq_length,))
print(k_input.shape)
embedding = Embedding(config.vocab_size, config.embedding_dim, input_length=config.max_seq_length)
embedding_input = embedding(k_input)
# 加入一维卷积,conv shape为(None, 48(50-3+1), 128(卷积核数))
conv_1 = Conv1D(config.num_filters, config.kernel_size)(embedding_input)
# 加入一维池化,在第二个维度上向下滑pool_1(None, 46(48-3+1), 128)
# pool_1 = MaxPooling1D(3, 1)(conv_1)
# # 再加入一维卷积,conv_2(None, 44(46-3+1), 64)
# conv_2 = Conv1D(64, config.kernel_size)(pool_1)
# 再加入一维池化,pool_2(None, 42(44-3+1), 64)
# pool_2 = MaxPooling1D(3, 1)(conv_2)
# 最后全局池化,按照第二个维度取最大值,所以第二个维度就消失了pool_3(None, 64)
pool_3 = GlobalMaxPooling1D()(conv_1)
print(pool_3.shape)
print(222222)
print(embedding_input.shape)
# global_embedding_input = GlobalAveragePooling1D()(embedding_input)
hidden1_layer_tensor = Dense(64, activation='relu')(pool_3)
output_layer_tensor = Dense(config.num_classes, activation="softmax")(hidden1_layer_tensor)
model = keras.Model(inputs=k_input, outputs=output_layer_tensor)
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=["accuracy"]
)