为了账号安全,请及时绑定邮箱和手机立即绑定

两个张量的Pytorch广播产品

两个张量的Pytorch广播产品

拉丁的传说 2021-04-04 12:15:00
我想将两个张量相乘,这是我得到的:A 形状张量 (20, 96, 110)B 形状张量 (20, 16, 110)第一个索引用于批次大小。我想要做的基本上是从B-中获取每个张量(20, 1, 110),例如,然后,我希望将每个A张量相乘(20, n, 110)。因此乘积将在最后:AB形状为的张量(20, 96 * 16, 110)。所以我想A通过广播将每个张量相乘B。在PyTorch中有做到这一点的方法吗?
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

使用torch.einsum后跟torch.reshape:


AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])

例子:


import numpy as np

import torch


# A of shape (2, 3, 2):

A = torch.from_numpy(np.array([[[1, 1], [2, 2], [3, 3]], 

                               [[4, 4], [5, 5], [6, 6]]]))

# B of shape (2, 2, 2):

B = torch.from_numpy(np.array([[[1, 1], [10, 10]], 

                               [[2, 2], [20, 20]]]))


# AB of shape (2, 3*2, 2):

AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])

# tensor([[[ 1, 1], [ 10, 10], [  2,  2], [ 20,   20], [ 3,   3], [ 30,  30]],

#         [[ 8, 8], [ 80, 80], [ 10, 10], [ 100, 100], [ 12, 12], [ 120, 120]]])


查看完整回答
反对 回复 2021-04-13
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号