用于一维序列(1D)的SE Block的Tensorflow实现

Squeeze-and-Excitation (SE) 模块或者称为SEnet

def SE_Block(input_tensor,ratio = 16):
    input_shape = K.int_shape(input_tensor)
    squeeze = tf.keras.layers.GlobalAveragePooling1D()(input_tensor)
    excitation = tf.keras.layers.Dense(units = input_shape[-1]//ratio, kernel_initializer='he_normal',activation='relu')(squeeze)
    excitation = tf.keras.layers.Dense(units = input_shape[-1],activation='sigmoid')(excitation)
    #excitation = tf.reshape(excitation, [-1, 1, input_shape[-1]])
    scale = tf.keras.layers.Multiply()([input_tensor, excitation])
    return scale

#X = tf.random.uniform((32, 352))
X = tf.keras.Input(shape=(32,352))
Y = SE_Block(X,16)
model = tf.keras.Model(inputs=[X], outputs=[Y])
model.summary()
print(Y.shape)

一维情况下的SE Block
输入是(Batch size,squence length,num of channels)
ratio是压缩率,这里是16
比如说输入是352个channel,中间经过全连接层的时候降为352/16=22
经过第二个连接层的时候再转换为352

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值