欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch教程(十五):element-wise、Broadcasting

发布时间:2024/9/18 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Pytorch教程(十五):element-wise、Broadcasting 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
t1 = torch.tensor([[1,2],[3,4] ], dtype=torch.float32) t2 = torch.tensor([[9,8],[7,6] ], dtype=torch.float32)

我们先创建了两个秩为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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。