文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

pytorch tensor内所有元素相乘怎么实现

2023-07-02 18:22

关注

这篇“pytorch tensor内所有元素相乘怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pytorch tensor内所有元素相乘怎么实现”文章吧。

tensor内所有元素相乘

a = torch.Tensor([1,2,3])print(torch.prod(a))

输出 

tensor(6.)

tensor乘法运算汇总与解析

元素一一相乘

该操作又称作 “哈达玛积”, 简单来说就是 tensor 元素逐个相乘。这个操作,是通过 * 也就是常规的乘号操作符定义的操作结果。torch.mul 是等价的。

import torchdef element_by_element():        x = torch.tensor([1, 2, 3])    y = torch.tensor([4, 5, 6])        return x * y, torch.mul(x, y)element_by_element()
(tensor([ 4, 10, 18]), tensor([ 4, 10, 18]))

这个操作是可以 broad cast 的。

def element_by_element_broadcast():        x = torch.tensor([1, 2, 3])    y = 2        return x * yelement_by_element_broadcast()
tensor([2, 4, 6])

向量点乘

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

如果都是1维的,返回的就是 dot product 结果

def vec_dot_product():        x = torch.tensor([1, 2, 3])    y = torch.tensor([4, 5, 6])        return torch.matmul(x, y)vec_dot_product()
tensor(32)

矩阵乘法

torch.matmul: If both arguments are 2-dimensional, the matrix-matrix product is returned.

如果都是2维,那么就是矩阵乘法的结果返回。与 torch.mm 是等价的,torch.mm 仅仅能处理的是矩阵乘法。

def matrix_multiple():        x = torch.tensor([        [1, 2, 3],        [4, 5, 6]    ])    y = torch.tensor([        [7, 8],        [9, 10],        [11, 12]    ])        return torch.matmul(x, y), torch.mm(x, y)matrix_multiple()
(tensor([[ 58,  64],         [139, 154]]), tensor([[ 58,  64],         [139, 154]]))

vector 与 matrix 相乘

torch.matmul: 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.

如果第一个是 vector, 第二个是 matrix, 会在 vector 中增加一个维度。也就是 vector 变成了 与 matrix 相乘之后,变成 , 在结果中将 维 再去掉。

def vec_matrix():    x = torch.tensor([1, 2, 3])    y = torch.tensor([        [7, 8],        [9, 10],        [11, 12]    ])        return torch.matmul(x, y)vec_matrix()
tensor([58, 64])

matrix 与 vector 相乘

同样的道理, vector会被扩充一个维度。

def matrix_vec():    x = torch.tensor([        [1, 2, 3],        [4, 5, 6]    ])    y = torch.tensor([        7, 8, 9    ])        return torch.matmul(x, y)matrix_vec()
tensor([ 50, 122])

带有batch_size 的 broad cast乘法

def batched_matrix_broadcasted_vector():    x = torch.tensor([        [            [1, 2], [3, 4]        ],        [            [5, 6], [7, 8]        ]    ])        print(f"x shape: {x.size()} \n {x}")    y = torch.tensor([1, 3])        return torch.matmul(x, y)batched_matrix_broadcasted_vector()
x shape: torch.Size([2, 2, 2])  tensor([[[1, 2],         [3, 4]],        [[5, 6],         [7, 8]]])tensor([[ 7, 15],        [23, 31]])
batched matrix x batched matrixdef batched_matrix_batched_matrix():    x = torch.tensor([        [            [1, 2, 1], [3, 4, 4]        ],        [            [5, 6, 2], [7, 8, 0]        ]    ])        y = torch.tensor([        [            [1, 2],             [3, 4],             [5, 6]        ],        [            [7, 8],             [9, 10],             [1, 2]        ]    ])        print(f"x shape: {x.size()} \n y shape: {y.size()}")    return torch.matmul(x, y)xy = batched_matrix_batched_matrix()print(f"xy shape: {xy.size()} \n {xy}")
x shape: torch.Size([2, 2, 3])  y shape: torch.Size([2, 3, 2])xy shape: torch.Size([2, 2, 2])  tensor([[[ 12,  16],         [ 35,  46]],        [[ 91, 104],         [121, 136]]])

上面的效果与 torch.bmm 是一样的。matmul 比 bmm 功能更加强大,但是 bmm 的语义非常明确, bmm 处理的只能是 3维的。

def batched_matrix_batched_matrix_bmm():    x = torch.tensor([        [            [1, 2, 1], [3, 4, 4]        ],        [            [5, 6, 2], [7, 8, 0]        ]    ])        y = torch.tensor([        [            [1, 2],             [3, 4],             [5, 6]        ],        [            [7, 8],             [9, 10],             [1, 2]        ]    ])        print(f"x shape: {x.size()} \n y shape: {y.size()}")    return torch.bmm(x, y)xy = batched_matrix_batched_matrix()print(f"xy shape: {xy.size()} \n {xy}")
x shape: torch.Size([2, 2, 3])  y shape: torch.Size([2, 3, 2])xy shape: torch.Size([2, 2, 2])  tensor([[[ 12,  16],         [ 35,  46]],        [[ 91, 104],         [121, 136]]])
tensordotdef tesnordot():    x = torch.tensor([        [1, 2, 1],         [3, 4, 4]])    y = torch.tensor([        [7, 8],         [9, 10],         [1, 2]])    print(f"x shape: {x.size()}, y shape: {y.size()}")    return torch.tensordot(x, y, dims=([0], [1]))tesnordot()
x shape: torch.Size([2, 3]), y shape: torch.Size([3, 2])tensor([[31, 39,  7],        [46, 58, 10],        [39, 49,  9]])

以上就是关于“pytorch tensor内所有元素相乘怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯