我正在尝试在 Pytorch 中实现自我关注。我需要计算以下表达式。
相似函数S(二维),P(二维),C'
S[i][j] = W1 * inp[i] + W2 * inp[j] + W3 * x1[i] * inp[j]
P[i][j] = e^(S[i][j]) / 所有 j(e ^ (S[i])) 的总和
基本上,P 是一个 softmax 函数
C'[i] = 总和(对于所有 j) P[i][j] * x1[j]
我使用 for 循环尝试了以下代码
for i in range(self.dim):
for j in range(self.dim):
S[i][j] = self.W1 * x1[i] + self.W2 * x1[j] + self.W3 * x1[i] * x1[j]
for i in range(self.dim):
for j in range(self.dim):
P[i][j] = torch.exp(S[i][j]) / torch.sum( torch.exp(S[i]))
# attend
for i in range(self.dim):
out[i] = 0
for j in range(self.dim):
out[i] += P[i][j] * x1[j]
有没有更快的方法在 Pytorch 中实现这一点?