TensorFlow实现自注意力机制(Self-attention),程序员如何解决中年危机

本文介绍了如何在TensorFlow中实现自注意力机制,详细阐述了卷积层的设计与权重初始化,以及如何通过频谱归一化提升性能。在自定义层中,使用1×1卷积计算注意力图,然后应用softmax进行注意力权重分配,最终与查询特征结合得到输出。

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

深度学习中的大多数计算都是为了提高速度性能而矢量化的,而对于自注意力也没有什么不同。如果为简单起见忽略 batch 维度,则 1×1 卷积后的激活将具有 (H, W, C) 的形状。第一步是将其重塑为形状为 (H×W, C) 的2D矩阵,并使用 θ θ θ 与 φ φ φ 的矩阵相乘来计算注意力图。在SAGAN中使用的自注意力模块中,还有另一个1×1卷积,用于将通道数恢复到与输入通道数相同的数量,然后使用可学习的参数进行缩放操作。

Tensorflow实现自注意力模块


首先在自定义层的build()中定义所有 1×1 卷积层和权重。这里,使用频谱归一化函数作为卷积层的核约束:

class SelfAttention(Layer):

def init(self):

super(SelfAttention, self).init()

def build(self, input_shape):

n,h,w,c = input_shape

self.n_feats = h * w

self.conv_theta = Conv2D(c//8, 1, padding=‘same’, kernel_constraint=SpectralNorm(), name=‘Conv_Theta’)

self.conv_phi = Conv2D(c//8, 1, padding=‘same’, kernel_constraint=SpectralNorm(), name=‘Conv_Phi’)

self.conv_g = Conv2D(c//8, 1, padding=‘same’, kernel_const

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值