• pytorch中维度不一致张量之间加减/逻辑运算问题


    规律1:如果相加的两个张量维度不一致,那么首先把维度低的那个张量从右边和维度高的张量对齐

    例如下面的代码,b的维度低一些,所以和a相加的时候b的维度就会先扩充为[1,1,5,6]。

    1. a = torch.ones([8, 4, 5, 6])
    2. b = torch.ones([5, 6])
    3. c = a+b
    4. print('c =',c.size())
    5. # c = torch.Size([8, 4, 5, 6])

    对齐后就可以跳转到规律2了。

    ​规律2:当两个张量维度相同时,对应轴的值需要一样,或者为1。

    相加时,把所有为1的轴进行复制扩充,从而得到两个维度完全相同的张量。然后对应位置相加即可。

    可以相加的例子:

    1、由于对应的每个轴要么相等,要么一方是1,因此可以相加。否则不可以相加。

    1. a = torch.ones([8, 4, 5, 6])
    2. b = torch.ones([1, 1, 5, 6])
    3. c = a+b
    4. # c = torch.Size([8, 4, 5, 6])

    进一步:

    1. a = torch.ones([5, 1, 1, 5])
    2. b = torch.ones([5, 5])
    3. c = a+b
    4. print('c =', c.size())
    5. # c = torch.Size([5, 1, 5, 5])

    这里 a 维度是(5,1,1,5),b 的维度是(5,5), 最终结果的 c 维度为(5,1,5,5),这里相加操作对 a 和 b 都进行了维度扩充
    运算时首先按规则1,将 b 从右边与 a 对齐,b 的维度变为(1,1,5,5),
    然后按规则2,a 和 b 的维度相同了,可以运算了,实际运算的时候 a 和 b 都会将维度为1的轴再进行复制扩充,维度都变为(5,1,5,5),因此可以进行加法运算了

    2、一方维度全是1,可以相加

    1. a = torch.ones([8, 4, 5, 6])
    2. print('a =',a.size())
    3. b = torch.ones([1, 1, 1, 1])
    4. print('b =',b.size())
    5. c = a+b
    6. print('c =',c.size())
    7. # c = torch.Size([8, 4, 5, 6])

    3、维度完全相等,可以相加

    1. a = torch.ones([8, 4, 5, 6])
    2. print('a =',a.size())
    3. b = torch.ones([8, 4, 5, 6])
    4. print('b =',b.size())
    5. c = a+b
    6. print('c =',c.size())
    7. # c = torch.Size([8, 4, 5, 6])

    不可以相加的例子

    1、由于4不等于2,因此不可以相加

    1. a = torch.ones([8, 4, 5, 6])
    2. print('a =',a.size())
    3. b = torch.ones([1, 2, 1, 6])
    4. print('b =',b.size())
    5. c = a+b
    6. print('c =',c.size())

    2、由于3不等于6,不可以相加

    1. a = torch.ones([8, 4, 5, 6])
    2. print('a =',a.size())
    3. b = torch.ones([1, 4, 1, 3])
    4. print('b =',b.size())
    5. c = a+b
    6. print('c =',c.size())
  • 相关阅读:
    中英文说明书:艾美捷肝细胞培养基试剂盒
    SpringMVC | SpringMVC中的 “数据绑定”
    供应链计划 SCP - Supply Chain Planning
    RunnerGo:让你的性能测试变得轻松简单
    【MATLAB教程案例38】语音信号的去噪方法matlab仿真学习——LMS自适应滤波,谱减法去噪滤波及维纳滤波等
    nodejs+vue教室管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
    Linux找茬
    深入理解 Django 信号机制
    安装EditorConfig
    英特尔OpenVINO工程师认证答案及解析(初级✔/中级/高级)
  • 原文地址:https://blog.csdn.net/ytusdc/article/details/128106265