zoukankan      html  css  js  c++  java
  • pytorch的matmul怎么广播

    1)如果是两个1维的,就向量内积;
    2)如果两个都是2维的,就矩阵相乘
    3)如果第一个是1维,第二个是2维;填充第一个使得能够和第二个参数相乘;如果第一个是2维,第二个是1维,就是矩阵和向量相乘;
    例:

    a = torch.zeros(7,)
    b= torch.zeros(7,8)

    >>> torch.matmul(a,b)
    tensor([0., 0., 0., 0., 0., 0., 0., 0.])

    如果a是5,8维,报错。

    例子2:

    a = torch.zeros(8,)
    b= torch.zeros(7,8)

    >>> torch.matmul(b,a)
    tensor([0., 0., 0., 0., 0., 0., 0.])

    如果a是5,7维,报错。

    4) 高维情况

    i)其中一个1维,另一个N维(N>2): 类似3),即需要靠近的那个维数相同,比如(7,)和(7,8,11),又比如(7,8,11)和(11,)

    ii)都高于2维,那么除掉最后两个维度之外(两个数的维数满足矩阵乘法,即,(m,p)和(p,n)),剩下的纬度满足pytorch的广播机制。比如:

    # can line up trailing dimensions
    >>> x=torch.empty(5,3,4,1)
    >>> y=torch.empty(  3,1,1)
    # x and y are broadcastable.
    # 1st trailing dimension: both have size 1
    # 2nd trailing dimension: y has size 1
    # 3rd trailing dimension: x size == y size
    # 4th trailing dimension: y dimension doesn't exist




    https://pytorch.org/docs/stable/notes/broadcasting.html#broadcasting-semantics


    https://pytorch.org/docs/stable/torch.html?highlight=matmul#torch.matmul

    torch.matmul(tensor1tensor2out=None) → Tensor:





    # can line up trailing dimensions >>> x=torch.empty(5,3,4,1) >>> y=torch.empty( 3,1,1) # x and y are broadcastable. # 1st trailing dimension: both have size 1 # 2nd trailing dimension: y has size 1 # 3rd trailing dimension: x size == y size # 4th trailing dimension: y dimension doesn't exist

    ###########################################################################需要除掉两个数的后两个维度,然后再看是否满足广播机制
    torch.matmul(tensor1tensor2out=None) → Tensor

    Matrix product of two tensors.

    The behavior depends on the dimensionality of the tensors as follows:

    • If both tensors are 1-dimensional, the dot product (scalar) is returned.

    • If both arguments are 2-dimensional, the matrix-matrix product is returned.

    • If the first argument is 1-dimensional and the second argument is 2-dimensional, a 1 is prepended to its dimension for the purpose of the matrix multiply. After the matrix multiply, the prepended dimension is removed.

    • If the first argument is 2-dimensional and the second argument is 1-dimensional, the matrix-vector product is returned.

    • If both arguments are at least 1-dimensional and at least one argument is N-dimensional (where N > 2), then a batched matrix multiply is returned. If the first argument is 1-dimensional, a 1 is prepended to its dimension for the purpose of the batched matrix multiply and removed after. If the second argument is 1-dimensional, a 1 is appended to its dimension for the purpose of the batched matrix multiple and removed after. The non-matrix (i.e. batch) dimensions are broadcasted (and thus must be broadcastable). For example, if tensor1 is a (j imes 1 imes n imes m)(j×1×n×m)tensor and tensor2 is a (k imes m imes p)(k×m×p) tensor, out will be an (j imes k imes n imes p)(j×k×n×p) tensor.



  • 相关阅读:
    python paramiko模块学习分享
    中国大数据市场规模分析及预测
    中国大数据市场规模分析及预测
    显著性水平 置信度 置信区间 实例讲解
    显著性水平 置信度 置信区间 实例讲解
    加密算法
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'qingmu' for key 'PRIMARY'
    spring Security的自定义用户认证
    spring的面试题
    solr和ElasticSearch(ES)的区别?
  • 原文地址:https://www.cnblogs.com/Wanggcong/p/11001119.html
Copyright © 2011-2022 走看看