import numpy as np
import torch.nn as nn
from sklearn.metrics.pairwise import cosine_similarity
softmax = nn.Softmax()
#设置查询向量和待查询向量
q = np.array([[1,2,3]])#使用cosine_similarity函数必须为二维向量
v = np.array([[1,2,3],[4,5,6]])
#计算q和v中每个向量之间的attention得分,此处使用余弦相似度计算,可以采取其他多种计算方式
sim = cosine_similarity(q,v)
#对计算得到的attention得分进行softmax归一化
softmax_sim = softmax(torch.tensor(sim[0]))
#依据attention对v中的每一个向量进行加权求和
attention = 0
for i in range(v.shape[0]):
attention += v[i] * np.array(softmax_sim[i])
#加权求和后取平均
attention = attention / v.shape[0]
import numpy as npimport torch.nn as nnfrom sklearn.metrics.pairwise import cosine_similaritysoftmax = nn.Softmax()#设置查询向量和待查询向量q = np.array([[1,2,3]])#使用cosine_similarity函数必须为二维向量v = np.array([[1,2,3],[4,5,6]])#计算q和v中每个向量之间的attention得分,此处使用余弦相似度
def file_name_walk(file_dir):
for root, dirs, files in os.walk(file_dir):
# print(root, root) # 当前目录路径
print(dirs, dirs) # 当前路径下所有子目录
print(files, files) # 当前路径下所有非目录子文件
file_name_walk(/home/kesci/input
every blog every motto: You can do more than you think.
0. 前言
梳理目前主流的注意力机制代码,目前以pytorch为例。
说明: 特征图维度的组织形式为:(batch,channel,height,width)
1. 正文
1.1 SEBlock 2017
考虑通道间的注意力之间的关系,在通道上加入注意力机制
论文:https://arxiv.org/abs/1709.01507
代码:https://github.com/hujie-frank
注意力机制广泛存在于现在的深度学习网络结构中,使用得到能够提升模型的学习效果。本文讲使用Pytorch实现多头自注意力模块。
一个典型的自注意力模块由Q、K、V三个矩阵的运算组成,Q、K、V三个矩阵都由原特征矩阵变换而来,所以本质上来说是对自身的运算。
而多头注意力机制则是单头注意力机制的进化版,把每次attention运算分组(头)进行,能够从多个维度提炼特征信息。具体原理可以参看相关的科普文章,下面是Pytorch实现。
import torch.nn as nn
class MHSA(nn.Mod