if temporal: relative_pos_bias = self.temporal_position_bias_table[self.t_relative_coords].view(self.num_ttokens, self.num_ttokens, -1).permute(2, 0, 1).contiguous() attn = attn + relative_pos_bias.unsqueeze(0) attn = self.softmax(attn) else: relative_position_bias = self.relative_position_bias_table[self.relative_position_index.view(-1)].view( self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww attn = attn + relative_position_bias.unsqueeze(0) if mask is not None: nW = mask.shape[0] attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0) attn = attn.view(-1, self.num_heads, N, N) attn = self.softmax(attn) else: attn = self.softmax(attn)
时间: 2023-06-19 12:07:25 浏览: 206
使用keras框架cnn+ctc_loss识别不定长字符图片操作
这段代码主要是实现了注意力机制中的相对位置编码,用于捕捉序列中不同位置之间的依赖关系。如果temporal为True,则使用时间维度的相对位置编码,否则使用空间维度的相对位置编码。在加入相对位置编码后,还进行了softmax操作,用于计算注意力权重。如果存在掩码,则在softmax操作前将掩码加入到注意力矩阵中。
阅读全文