AveragePooling1D层 和 MaxPooling1D layer

本文介绍了TensorFlow库中Keras层的AveragePooling1D和MaxPooling1D用于一维时序数据的平均和最大池化操作,包括pool_size、strides、padding选项以及data_format的重要性。同时,展示了如何在不同填充模式下调整输出形状。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AveragePooling1D层
tf.keras.layers.AveragePooling1D(
pool_size=2, strides=None, padding=“valid”, data_format=“channels_last”, **kwargs
)
平均池化用于时序数据。
下采样输入表示,通过对被定义为pool_size的窗口取平均值。窗口根据步长strides进行切换。
当使用"valid" (padding)填充选项时,结果的输出的形状为:output_shape = (input_shape - pool_size + 1) / strides)
示例代码1:

x = tf.constant([1., 2., 3., 4., 5.])
x = tf.reshape(x, [1, 5, 1])
x
<tf.Tensor: shape=(1, 5, 1), dtype=float32, numpy=
array([[[1.],
[2.],
[3.],
[4.],
[5.]], dtype=float32)>
avg_pool_1d = tf.keras.layers.AveragePooling1D(pool_size=2,
… strides=1, padding=‘valid’)
avg_pool_1d(x)
<tf.Tensor: shape=(1, 4, 1), dtype=float32, numpy=
array([[[1.5],
[2.5],
[3.5],
[4.5]]], dtype=float32)>
当使用"same"(padding)填充选项时,输出形状:output_shape = input_shape / strides
示例代码2:
x = tf.constant([1., 2., 3., 4., 5.])
x = tf.reshape(x, [1, 5, 1])
x
<tf.Tensor: shape=(1, 5, 1), dtype=float32, numpy=
array([[[1.],
[2.],
[3.],
[4.],
[5.]], dtype=float32)>
avg_pool_1d = tf.keras.layers.AveragePooling1D(pool_size=2,
… strides=1, padding=‘same’)
avg_pool_1d(x)
<tf.Tensor: shape=(1, 5, 1), dtype=float32, numpy=
array([[[1.5],
[2.5],
[3.5],
[4.5],
[5.]]], dtype=float32)>
参数:
pool_size:平均池化窗口的大小;
strides:步长,如果是None,它默认值为pool_size。
data_format:字符串,可选项为“channels_last”和“channels_first”。也就是输入中的维度排序,channels_last 对应于inputs with shape (batch, steps, features),channels_first 对应于 inputs with shape (batch, features, steps)。
GlobalAveragePooling1D层
tf.keras.layers.GlobalAveragePooling1D(data_format=“channels_last”, **kwargs)

示例代码:

input_shape = (2, 3, 4)
x = tf.random.normal(input_shape)
y = tf.keras.layers.GlobalAveragePooling1D()(x)
print(y.shape)

1、MaxPooling1D layer
一维最大池化层

keras.layers.MaxPooling1D(
pool_size=2, strides=None, padding=“valid”, data_format=None, name=None, **kwargs
)
参数说明
pool_size:整数或整数元组,表示池化窗口的大小。如果为整数,则在每个维度上使用相同的池化窗口大小。例如,pool_size=2 表示在每个维度上使用大小为 2 的池化窗口。
strides:整数或整数元组,表示池化窗口在每个维度上的步长。如果为整数,则在每个维度上使用相同的步长。例如,strides=2 表示在每个维度上使用步长为 2 的池化窗口。默认值为 None,此时步长与池化窗口大小相同。
padding:字符串,表示填充方式。可选值为 “valid”(不填充)和 “same”(填充)。默认值为 “valid”。
data_format:字符串,表示输入数据的格式。可选值为 “channels_first”(通道优先)和 “channels_last”(通道最后一个)。默认值为 None,此时根据 TensorFlow 的版本自动选择数据格式。
name:字符串,表示该层的名称。默认值为 None。

def cnn_transformer_model(spectra_feature_dim, candidate_feature_dim, num_classes=1): # 输入 spectra_input = Input(shape=(spectra_feature_dim,)) candidate_input = Input(shape=(candidate_feature_dim,)) inputs = Concatenate()([spectra_input, candidate_input]) # --- CNN部分:提取局部特征 --- # 卷积1:提取局部峰模式(如同位素簇) x = layers.Conv1D(filters=64, kernel_size=50, strides=10, activation='relu')(inputs) x = layers.BatchNormalization()(x) x = layers.MaxPooling1D(pool_size=2)(x) # 输出形状: (None, 499, 64) # 卷积2:进一步抽象特征 x = layers.Conv1D(filters=128, kernel_size=20, strides=5, activation='relu')(x) x = layers.BatchNormalization()(x) x = layers.MaxPooling1D(pool_size=2)(x) # 输出形状: (None, 49, 128) # --- Transformer部分:建模全局关系 --- # 位置编码(手动添加) positions = tf.range(start=0, limit=tf.shape(x)[1], delta=1) position_embedding = layers.Embedding( input_dim=49, output_dim=128 )(positions) # 输出形状: (49, 128) # 将CNN输出与位置编码相加 x = x + position_embedding # Transformer Encoder x = layers.MultiHeadAttention(num_heads=4, key_dim=32)(x, x) x = layers.Dropout(0.1)(x) x = layers.LayerNormalization()(x) # --- 分类头 --- x = layers.GlobalAveragePooling1D()(x) x = layers.Dense(64, activation='relu')(x) outputs = layers.Dense(num_classes, activation='sigmoid')(x) model = Model(inputs=[spectra_input, candidate_input], outputs=outputs) return model在模型里增加X_reshaped = X_normalized[..., np.newaxis]这个改变形状的
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值