题解 | 简化Attention输出的元素总和

简化Attention输出的元素总和

https://www.nowcoder.com/practice/3ba85cb991d4471b81ad6d775447fc44

import sys

from numpy import ones
from numpy import triu, transpose, sqrt, exp, max, sum, zeros

def attention(n,m,h):
    X = ones((n,m))
    W1 = triu(ones((m,h)))
    W2 = triu(ones((m,h)))
    W3 = triu(ones((m,h)))
    Q = X@W1 # 矩阵相乘,请用@,千万别用*!!!
    K = X@W2
    V = X@W3
    S = (Q @ transpose(K)) / sqrt(h)

    def softmax(X):
        after_softmax = zeros((n,n))
        for l in range(len(X)): # 0,...,n-1
            fenzi = exp(X[l]) # 一个行向量
            fenmu = sum(exp(X[l])) # 一个数
            after_softmax[l] = fenzi / fenmu # 一个行向量
        return after_softmax

    Y = softmax(S) @ V
    ans = round(sum(Y))
    return ans

for line in sys.stdin:
    a = line.split()
    print(attention(int(a[0]),int(a[1]),int(a[2])))

全部评论

相关推荐

后端转测开第一人:再怎么劝退也没用的 某些群体总以为在一个幸存者偏差的软件上看见了极少数秋招上岸某个大厂的个例就幻想上了 事实上自己打开ssob沟通1000+连个小厂面试都没
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务