class Attention(nn.Module): def __init__(self, hidden_size): super(Attention, self).__init__() self.hidden_size = hidden_size self.attention_weights = nn.Linear(hidden_size, hidden_size) def forward(self, inputs, mask): mask = mask.unsqueeze(-1).float() scores = self.attention_weights(inputs) scores = scores.masked_fill(mask == 0, -1e9) attention_weights = torch.softmax(scores, dim=1) # 在维度 1 上进行 softmax weighted_inputs = inputs * attention_weights return weighted_inputs
时间: 2024-03-31 20:38:59 浏览: 74
python使用 __init__初始化操作简单示例
5星 · 资源好评率100%
这是一个 PyTorch 中实现注意力机制的类 Attention。它的输入有两个参数,一个是 inputs,表示输入的特征向量;另一个是 mask,表示掩码,用于在计算注意力权重时屏蔽掉某些位置。在 forward 方法中,首先将输入的掩码 mask 扩展一个维度,并将其转换为浮点数类型。然后通过一个全连接层计算出每个位置的注意力得分 scores。对于被 mask 屏蔽的位置,将其得分设置为一个极小的负值。接着在维度 1 上进行 softmax,得到每个位置的注意力权重 attention_weights。最后将输入的特征向量 inputs 与注意力权重 attention_weights 相乘,得到加权后的特征向量 weighted_inputs,作为 Attention 的输出。
阅读全文