keras cnn注意力机制_注意力机制之SCA-CNN论文解读

ba45614292cb3fc3a8cf879e70d0e4bf.png

2c37fd6fe375e77879c8040ddf5e60f5.png

首先说说为什么要讲解这篇论文,这篇论文是发表在2017年CVPR上的论文,之所以挑出来讲解,是因为自己想了解一下注意力机制方面的知识。之前一直听说过“attention”,但就不知道什么意思,更别说应用了,一提到“attention”就觉得很高大上,所以近期准备研究一些关于注意力的文章。话不多说,进入正题!

【注意力机制的初衷】

什么是注意力机制?他是干嘛的呢?简单的来说就是把目光放在重点特征上,忽略那些无关紧要的信息。论文在摘要部分就说了注意力机制的设计初衷:一个动态的上下文有关的横跨时间的特征提取器。这句话怎么理解呢?我个人认为就是统筹全局信息(包括前面已获得的先验信息)来对现在的特征进行提取重要有用的信息。本文是结合空间注意力(spatial attetion)和通道注意力(channel-wise)两者共同在多层特征之间的应用。attention机制的本质是训练一个权重,然后这个权重可以用来对channel做选择或者叠加在feature map的每个像素点上,比如之前我讲解的SE-Net就是采用的训练权重对feature map的channel做选择的方式。

【Introduction】

58d6250844c3311a833a327b56965937.png

这是论文中的一张图,反映了通道注意力(channel-wise)在多层特征(multi-layer)间的应用。采用channel wise attention方法处理网络的某些层(比如VGG19网络中的conv5_3和conv5_4层)后的可视化效果。选取其中权重最大的3个channel的feature map并可视化,同时展示了每个channel的feature map对应的5张图像中感受野的响应最大的区域。

【流程】

9113d65ce08340b1eab7ecfc1e9d10a1.png

稍微解释一下:

(1)spatial attention:以当前feature map的每个像素为单位,对每个像素都分配一个权重值,这个权重值是一个二维矩阵;

(2)channel-wise:以feature map为单位,对每个channel分配一个权重,因此这个权重是一个向量。

上图是SCA-CNN的整体图,还是采取的经典的encoder-decoder结构,主要包含CNN网络(encoder)和LSTM网络(decoder)两部分。CNN网络包含spatial attention和channel wise attention两种attention操作。spatial attention可以理解以feature map的每个像素点为单位,对feature map的每个像素点都配一个权重值,因此这个权重值应该是一个矩阵;channel wise attention则是以feature map为单位,对每个channel都配一个权重值,因此这个权重值应该是一个向量。

其实对于LSTM笔者也不熟悉,所以这里暂时不详说。

好了,这篇基本上就说到这了,主要让大家了解一下注意力机制的一个大概情况,后面还会陆续带来相关的其他论文!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于Keras框架的CNN-LSTM注意力机制代码示例: ```python from keras.models import Model from keras.layers import Input, Conv1D, MaxPooling1D, LSTM, Dense, Dropout, Flatten, concatenate, Activation, Multiply # 定义CNN-LSTM模型结构 def cnn_lstm_model(input_shape): input_layer = Input(shape=input_shape) # CNN部分 conv1 = Conv1D(filters=64, kernel_size=3, padding='same', activation='relu')(input_layer) conv1 = MaxPooling1D(pool_size=2)(conv1) conv1 = Dropout(0.2)(conv1) conv2 = Conv1D(filters=128, kernel_size=3, padding='same', activation='relu')(conv1) conv2 = MaxPooling1D(pool_size=2)(conv2) conv2 = Dropout(0.2)(conv2) conv3 = Conv1D(filters=256, kernel_size=3, padding='same', activation='relu')(conv2) conv3 = MaxPooling1D(pool_size=2)(conv3) conv3 = Dropout(0.2)(conv3) conv4 = Conv1D(filters=512, kernel_size=3, padding='same', activation='relu')(conv3) conv4 = MaxPooling1D(pool_size=2)(conv4) conv4 = Dropout(0.2)(conv4) flatten = Flatten()(conv4) # LSTM部分 lstm = LSTM(units=128, return_sequences=True)(input_layer) lstm = LSTM(units=128)(lstm) # 注意力机制部分 attention = Dense(1, activation='tanh')(conv4) attention = Flatten()(attention) attention = Activation('softmax')(attention) attention = Multiply()([conv4, attention]) attention = Flatten()(attention) # 合并CNN和LSTM部分 merge = concatenate([flatten, lstm, attention]) output = Dense(1, activation='sigmoid')(merge) model = Model(inputs=input_layer, outputs=output) return model ``` 该代码定义了一个CNN-LSTM模型结构,其中包含了注意力机制部分。CNN部分包含了4个卷积层和池化层,LSTM部分包含了2个LSTM层,注意力机制部分包含了一个全连接层、一个softmax层和一个乘法层。最后将三个部分的输出合并起来,接一个全连接层输出最终结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值