Я пытаюсь реализовать свое внимание в Pytorch.Мне нужно вычислить следующие выражения:
Функция подобия S (2-мерная), P (2-мерная), 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?