Tensorflow中Attention机制分析

文章介绍了Attention机制在深度学习模型中的作用,特别是通道Attention的概念,即对不同特征图像赋予不同权重。在Tensorflow中,通过池化和全连接层实现Attention,然后通过点乘得到Attention图。文章还提供了一个简单的Tensorflow代码示例来说明张量点乘的计算过程。

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

1、Attention机制

首先简单讲解下Attention机制

Attention机制在近几年的深度学习模型中可谓是刷分利器,万物皆可Attention。那么在卷积神经网络(CNN)中,Attention是怎么工作的呢?

在深度学习模型中,一般从深度和宽度两个方面增加模型的复杂度,深度自然是指模型层数,在Resnet框架出来之后,目前模型可以叠到1000多层(针对大型数据集,小型数据集容易出现过拟合)。而宽度指的是每层卷积核的个数,如Res-34最后一层卷积核为512,Res-50,101,152等最后一层为2048。在CNN中,卷积被用于提取图像特征,然后各个卷积核提取到的特征并未有区别化。

比如人眼看下图时(图片来源于网络,别在意内容),会自动聚焦到人物轮廓上,即赋予人物较大权重,实际上卷积就是一种赋权方式,也有论文基于此提出Spatial Attention结构。本文所讲的是通道Attention结构

所谓通道Attention,即对不同特征图像赋予不同的权重。

如下图所示,左侧每层不同颜色表示不同的特征图,右侧表示不同权重,每种颜色代表一个权重值。通过左右相乘,得到不同的特征权重。计算过程中使用到了广播,左边一层特征图大小为w*h(二维张量),右边一层为单一标量(一个数值),相乘即左边每个元素与右边标量相乘。

2、Tensorflow中attention的实现机制

设某个卷积我们得到的张量形状为T(b, w, h, d), b为batch_size,w和h为特征图T的长和宽,d为特征图个数,即为深度。

1 使用(b, w, h, c)形状的池化核对特征图T进行池化,得到(b, 1, 1, c)类似于全连接的层,c为全连接神经元个数;

2 再通过一层全连接将全连接层映射回(b, d),并reshape成F(b, 1, 1, d),并使用softmax或者sigmoid等函数对F进行归一化;

3 最后使用tensorflow点乘T*F得到与原特征图大小一致的Attention图A(b , w, h, d)

#attention
def multiply():
    tem_list = [x for x in range(36)]
    c1 = tf.constant(tem_list, shape=[3,2,2,3])
    c2 = tf.constant([0,1,2,3,4,5,6,7,8],shape=[3,1,1,3])
    tensor1 = c1*c2
    sess=tf.Session()
    with sess.as_default():
        print('c1:', c1.eval())
        print('c1:', c2.eval())
        print('结果是:', tensor1.eval())

首先吹一波python的优雅,建立一个序数列表只需要一行代码tem_list = [x for x in range(36)]。

此程序的运行结果为:

为了复现2中的计算过程,我创建了一个大小为(3, 2, 2, 3)的张量C1,同时创建了一个(3, 1, 1 ,3)的张量C2,两者进行点乘得到结果tensor1。

解释一下上图结果,我们首先抛开第一个维度3,只关注后面三维的数据,红框圈出的表示一个batch中的C1,C2,C3数据,其中C1维度是(2,2,3),C2(1, 1,3),tensor1(2,2,3),对于这个数据点乘计算是,8*35, 8*32, 8*29, 8*26 。其含义是用标量8*维度为(2,2)的二维特征图,其他维度依次类推,便可得到tensor1的结果。

对于矩阵不熟悉的建议多输出矩阵,多看数据与形状之间的关系便可了解。

3、结语

这篇博客主要是讲Attention机制的理解及其在Tensorflow中的实现,并辅助代码理解tensorflow中张量点乘的实例计算方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾城一少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值