Pytorch教程(十五):element-wise、Broadcasting
我们先创建了两个秩为2,形状为 2×22 \times 22×2的张量,这意味着我们有两个轴,他们都有两个元素的长度,第一个轴的元素是数组,第二个轴的元素是数字。
两个张量必须具有相同数量的元素才能执行一个element-wise操作。也就是说两个张量必须具有相同的形状才能执行一个元素操作,具有相同的形状意味着每一个对应的轴上有相同数量的轴,并且他们的长度相同。
在相应位置的每一对元素被加在一起,产生一个具有相同形状的新张量,所以加法是一个element-wise运算。所有其他的算数运算,比如减法、乘法、除法也是元素运算。
我们通常用张量看到的运算是使用标量值的算数运算,而下面这些例子打破了我们建立的规则,即元素的操作需要在张量有相同的形状的前提下进行,所有的标量值都是零阶张量,这就意味着他们没有形状,我们的张量t1是一个2×22 \times 22×2的二阶张量,那么这时如何调整的呢?
可能想到的第一个解决方案是,操作只是简单地使用单个标量值,并对一个张量中的每个元素进行操作,这种逻辑是可行的,然而这有点误导人,它打破了一个更普遍的情况,即我们没有使用标量的情况,要以不同的方式来思考这些操作,我们需要引入张量广播的概念。
广播定义了在元素操作过程中如何处理不同形状的张量。
我们重新考虑一下t1+2运算,标量张量被扩展到张量t1的形状,然后进行元素运算,通过对numpy函数的广播,我们可以看到在标量值上的广播是什么样子:
下面看一个稍微复杂一点的情况:
即使这些张量有不同的shape,但依然可以相加,这正是得益于广播机制,较低的秩向量t2将通过广播进行转换,以匹配更高阶张量t1的形状,而元素将像往常一样执行。我们可以使用广播到numpy函数来检查广播转换,然后运行操作:
可以看出t2被广播成了shape为2×22 \times 22×2的tensor,这样t1 + t2就是相同shape之间的操作。而这就是torch内部自动帮我们做的,我们无需手动执行广播。
总结
以上是生活随笔为你收集整理的Pytorch教程(十五):element-wise、Broadcasting的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 3000元以内投影仪推荐什么牌子?
- 下一篇: Pytorch教程(十六):Fashio