一维pytorch注意力机制

最近在研究一维数据,发现目前网络上的注意力机制都是基于二维来构建的,对于一维的,没有查到什么可直接加在网络中的代码,因此本次文章主要介绍常用的三种注意力机制–SENet,CBAM和ECA其一维的代码。

1.SEnet注意力机制

SE模块允许对特征重新校准,其核心是通过全连接层对全局信息学习,根据损失函数值Loss实现通道权重梯度更新,并获取每个通道特征的权重信息,依据权重值的大小来增加有用特征的学习,抑制不重要的特征信息,提高网络运行效率。
具体的过程为:
注意力机制传入四个参数,B C W H,因此一维只需传入三个参数,并将二维卷积核换为一维卷积核即可,接下来是模型参数结构展示:
在这里插入图片描述
在这里插入图片描述

2.CBAM注意力机制

CBAM将通道注意力机制和空间注意力机制进行一个结合,相比于SENet只关注通道的注意力机制可以取得更好的效果。其改动为需进行一维的全局平均池化与全局最大池化,同样将二维卷积改为一维卷积即可。
接下来是模型参数结构展示:

MyModel(
  (features): Sequential(
    (0): Conv1d(32, 32, kernel_size=(3,), stride=(2,), padding=(1,))
    (1): BatchNorm1d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
    (3): CBAM(
      (channelAttention): ChannelAttention(
        (avg_pool): AdaptiveAvgPool1d(output_size=1)
        (max_pool): AdaptiveMaxPool1d(output_size=1)
        (fc1): Conv1d(32, 2, kernel_size=(1,), stride=(1,))
        (relu1): ReLU()
        (fc2): Conv1d(2, 32, kernel_size=(1,), stride=(1,))
        (sigmoid): Sigmoid()
      )
      (spatialAttention): SpatialAttention(
        (conv1): Conv1d(2, 1, kernel_size=(7,), stride=(1,), padding=(3,))
        (sigmoid): Sigmoid()
      )
    )
    (4): Conv1d(32, 32, kernel_size=(3,), stride=(2,), padding=(1,))
    (5): BatchNorm1d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (6): ReLU()
    (7): Conv1d(32, 32, kernel_size=(3,), stride=(2,), padding=(1,))
    (8): BatchNorm1d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (9): ReLU()
  )
  (classifier): Sequential(
    (0): Linear(in_features=384, out_features=48, bias=True)
    (1): ReLU()
    (2): Linear(in_features=48, out_features=2, bias=True)
  )
)

模型参数表:
在这里插入图片描述

3.ECA注意力机制

ECA通过快速的一维卷积产生通道注意,其核大小可以通过通道维数的非线性映射自适应地确定。并且ECA是一个非常轻量级的即插即用块,可以提高各种深度CNN架构的性能。
ECA的改动则为去掉维度转换函数与删除维度的函数。
![(https://img-blog.csdnimg.cn/8c5b141195b0465a8b10f8f9b5057490.png)

接下来是模型参数结构展示:

MyModel(
  (features): Sequential(
    (0): Conv1d(32, 32, kernel_size=(3,), stride=(2,), padding=(1,))
    (1): BatchNorm1d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
    (3): ECABlock(
      (avg_pool): AdaptiveAvgPool1d(output_size=1)
      (conv): Conv1d(32, 32, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
      (sigmoid): Sigmoid()
    )
    (4): Conv1d(32, 32, kernel_size=(3,), stride=(2,), padding=(1,))
    (5): BatchNorm1d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (6): ReLU()
    (7): Conv1d(32, 32, kernel_size=(3,), stride=(2,), padding=(1,))
    (8): BatchNorm1d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (9): ReLU()
  )
  (classifier): Sequential(
    (0): Linear(in_features=384, out_features=48, bias=True)
    (1): ReLU()
    (2): Linear(in_features=48, out_features=2, bias=True)
  )
)

模型参数表:
在这里插入图片描述
对于代码,可关注我们公众号浩浩的科研笔记,代码都在上面。我们也是有售后的,所以大家可以放心。

  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值