首页 > 其他分享 >矩阵和 numpy.transpose

矩阵和 numpy.transpose

时间:2022-08-28 13:34:04浏览次数:51  
标签:transpose 矩阵 np print query numpy

                   

矩阵和 numpy.transpose

文章[Transformer源码详解(Pytorch版本) - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/398039366?utm_campaign=shareopn&utm_medium=social&utm_oi=1396930517548257280&utm_psn=1547199426296487936&utm_source=wechat_session)

代码 [harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper. (github.com)](https://github.com/harvardnlp/annotated-transformer)

所引出的问题

部分受启发于 https://www.cnblogs.com/sunshinewang/p/6893503.html

转置有三种方式,transpose方法、T属性以及swapaxes方法。

矩阵

import numpy as np
x = np.arange(24).reshape((2,3,4))
print(x)
print(x.transpose((1,0,2))) # shape(3,2,4)

[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

[[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
#############################################
[[[ 0  1  2  3]
  [12 13 14 15]]

 [[ 4  5  6  7]
  [16 17 18 19]]

 [[ 8  9 10 11]
  [20 21 22 23]]]

括号上 由外到内的一个层级

不要思考xyz了,直接用012的思路吧,012就是从内到外的一个矩阵层次划分,对应到矩阵表示中也是同理的

转置

主要是 numpy.transpose

主要是考虑角标? 毕竟矩阵表示中的 xyz 对应着每一个坐标的xyz,与数学中强调形状不同,计算机中矩阵的应用更强调于角标的变换,我个人的三维想象能力欠佳,所以只能以角标计算的方式理解代码中的矩阵转置

def attention(query, key, value, mask=None, dropout=None):
    "Compute 'Scaled Dot Product Attention'"
    d_k = query.size(-1)
    scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k)
    if mask is not None:
        scores = scores.masked_fill(mask == 0, -1e9)
    p_attn = scores.softmax(dim=-1)
    if dropout is not None:
        p_attn = dropout(p_attn)
    return torch.matmul(p_attn, value), p_attn

第四行这个地方我目前倾向于写错了,首先这样的-1,-2的写法也需要满足维度,我用jupyter的实验中,维度不符合是不可以的。

下面是具体实验内容。

(-2,-1)

import numpy as np
x = np.arange(6).reshape(2,3)
print(x)
print("############################")
print(x.transpose(-2,-1)) 

[[0 1 2]
 [3 4 5]]
############################
[[0 1 2]
 [3 4 5]]

(-1,-2)

import numpy as np
x = np.arange(6).reshape(2,3)
print(x)
print("############################")
print(x.transpose(-1,-2))

[[0 1 2]
 [3 4 5]]
############################
[[0 3]
 [1 4]
 [2 5]]

另外在代码中的与qkv计算相关的部分

        query, key, value = [
            lin(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2)
            for lin, x in zip(self.linears, (query, key, value))
        ]

标签:transpose,矩阵,np,print,query,numpy
From: https://www.cnblogs.com/CCCarloooo/p/16632623.html

相关文章

  • 519. 随机翻转矩阵 (hash 映射移动到最后)
     难度中等143收藏分享切换为英文接收动态反馈给你一个 mxn 的二元矩阵 matrix ,且所有值被初始化为 0 。请你设计一个算法,随机选取一个满足 matrix[i][j]......
  • 矩阵快速幂优化dp
    writtenon2022-08-24总结一下该算法适用题目类型以及一般方法。在碰到需要优化的dp时,这是一种思考方向。在往这方面思考时,要注重观察转移形式是否是基本一致的。以P3......
  • 【python】numpy数组升维函数expand_dims()
    expand_dims(a,axis),其中a为输入的数组,axis为整型指定要增加的维数位置可以结合shape()来看,shape()返回的是一个tuple,把其看成一个数组并指定下标。如果shape为(1,2),则......
  • Windows10 pybind11 opencv 和numpy相互转换 (tcy)
      利用pybind11实现python和C++图像之间的相互调用。将Mat类引入python中。 图像相互转换通过左值引用及智能指针实现。封装了类操作及8个函数(Mat和numpy......
  • ac 796子矩阵的和
    include<bits/stdc++.h>usingnamespacestd;intmain(){#ifdefONLINE_JUDGE#elsefreopen("D:\\Helloworld\\编程输入2\\in.tx......
  • 动态规划之——矩阵连乘问题
    先看问题描述:给定7个数字30、35、15、5、10、20、25,只能相邻的两个数字组成矩阵,即:30*35、35*15、15*5、5*10、10*20、20*25共计6个矩阵,且只能相邻的两个矩阵相乘。求矩阵......
  • numpy的基本使用
    参考1.Numpy介绍Numpy全称为numbericalpython。2.ndarray介绍ndarray全称N-dimensionalarray,一个N维数组类型,相同类型元素的集合。ndarray比python中的原生列表运算......
  • 计蒜客 | 矩阵蛇形输出
    题目:给定一个m行、n*列的矩阵,请按照下图所示的顺序输出矩阵中所有的元素(从[0][0]位置开始,具体请参见下图)。注意每次碰到边界后,必须且只能沿着边界移动一格,不能后退......
  • numpy
    numpy1、构造:类型强制统一的特点str>float>intnp.array([])np.ones(shape)np.zero()np.full(fill_value)np.eye()np.linspace(low,high,num)np.arrange......
  • Python Numpy
    一、numpy简介NumPy(NumericalPython)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也征地数组运算提供大量的数据函数库NumPy的前身Numeric最......