浅谈Pytorch广播机制
广播机制 从后往前依次检查维度,如果两个张量对应的维度上数目相等,则会按照该维度相加
若其中一个维度数目为1,则会应用广播机制.
如:
1 2 3 | a = torch.arange( 3 ).reshape([ 1 , 3 , 1 ]) b = torch.arange( 3 ).reshape([ 1 , 3 , 1 ]) a + b #维度均相等 |
输出为:
1 2 3 | tensor([[[ 0 ], [ 2 ], [ 4 ]]]) |
维度不相等_1:
1 2 3 | a = torch.arange( 3 ).reshape([ 1 , 3 , 1 ]) b = torch.arange( 6 ).reshape([ 1 , 3 , 2 ]) a + b #维度不相等_1 |
理解为:
1 | a是tensor([[[ 0 ],[ 1 ],[ 2 ]]]) 增加维度,广播为: tensor([[ 0 , 0 ], [ 1 , 1 ], [ 2 , 2 ]]) b为tensor([[[ 0 , 1 ], [ 2 , 3 ], [ 4 , 5 ]]])<br><br>则 a + b = tensor([[[ 0 , 1 ], [ 3 , 4 ], [ 6 , 7 ]]]) |
同理,可以获得如下结果:
1 2 3 4 5 | a = torch.arange( 3 ).reshape([ 1 , 3 , 1 ]) b = torch.arange( 6 ).reshape([ 1 , 3 , 2 ]) a + b >>>tensor([[[ 0 , 1 ], [ 3 , 4 ], [ 6 , 7 ]]]) |
1 2 3 4 5 | a = torch.arange( 3 ).reshape([ 1 , 3 , 1 ]) b = torch.arange( 2 ).reshape([ 1 , 1 , 2 ]) a + b >>>tensor([[[ 0 , 1 ], [ 1 , 2 ], [ 2 , 3 ]]]) |
1 2 3 4 5 6 7 | a = torch.arange( 3 ).reshape([ 1 , 3 , 1 ]) b = torch.arange( 6 ).reshape([ 3 , 1 , 2 ]) a + b >>>tensor([[[ 0 , 1 ], [ 1 , 2 ], [ 2 , 3 ]], [[ 2 , 3 ], [ 3 , 4 ], [ 4 , 5 ]], [[ 4 , 5 ], [ 5 , 6 ], [ 6 , 7 ]]]) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人