福州网上商城网站建设,昆明网站制作企业,宁夏住房和城乡建设官网,产品推广图片一、说明 张量广播#xff08;tensor broadcasting#xff09;是一种将低维张量自动转化为高维张量的技术#xff0c;使得张量之间可以进行基于元素的运算#xff08;如加、减、乘等#xff09;。在进行张量广播时#xff0c;会将维度数较少的张量沿着长度为1的轴进行复制… 一、说明 张量广播tensor broadcasting是一种将低维张量自动转化为高维张量的技术使得张量之间可以进行基于元素的运算如加、减、乘等。在进行张量广播时会将维度数较少的张量沿着长度为1的轴进行复制在匹配维度后两个张量就可以进行运算。 二、张量的基本概念 当较小的张量被“拉伸”以具有与较大张量的兼容形状以执行操作时就会发生广播。 广播可以成为执行张量运算而不创建重复数据的有效方法。 根据 PyTorch 的说法在以下情况下张量是“可广播的” 每个张量至少有一个维度 循环访问维度大小时从尾随维度开始维度大小必须相等、其中一个为 1或者其中一个不存在 比较形状时尾随维度是最右边的数字。 在上图中可以看到通用过程 1. 确定最右侧的尺寸是否兼容 每个张量是否至少有一个维度大小相等吗其中之一吗一个不存在吗 2. 将尺寸拉伸到适当的尺寸 3. 对下一个维度重复上述步骤 这些步骤可以在下面的示例中看到。 三、元素级操作 所有元素级运算都要求张量具有相同的形状。 3.1 矢量和标量示例 import torch
a torch.tensor([1, 2, 3])
b 2 # becomes ([2, 2, 2])a * b tensor([2, 4, 6]) 在此示例中标量的形状为 1矢量的形状为 3。如图所示b被广播为3的形状并且Hadamard乘积按预期执行。 3.2 矩阵和矢量示例 1 在此示例中A 的形状为 3 3b 的形状为 3。 发生乘法时向量被逐行拉伸以创建一个矩阵如上图所示。现在A 和 b 的形状均为 3 3。 这可以在下面看到。
A torch.tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])b torch.tensor([1, 2, 3])A * b tensor([[ 1, 4, 9],[ 4, 10, 18],[ 7, 16, 27]]) 3.3 矩阵和矢量示例 2 在此示例中A 的形状为 3 3b 的形状为 3 1。 发生乘法时向量将逐列拉伸以创建两个额外的列如上图所示。现在A 和 b 的形状均为 3 3。 A torch.tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])b torch.tensor([[1], [2], [3]])
A * b tensor([[ 1, 2, 3],[ 8, 10, 12],[21, 24, 27]]) Tensor and Vector Example 在此示例中A 是形状为 2 3 3 的张量b 是形状为 3 1 的列向量。 A (2, 3, 3)
b ( , 3, 1) 从最右边的维度开始每个元素按列拉伸以生成 3 3 矩阵。中间维度相等。在这一点上b只是一个矩阵。最左侧的维度不存在因此必须添加一个维度。然后必须广播矩阵以创建 2 3 3 的大小。现在有两个 3 3 个矩阵可以在上图中看到。 这允许计算 Hadamard 乘积并生成 2 3 3 矩阵 A torch.tensor([[[1, 2, 3],[4, 5, 6],[7, 8, 9]],[[1, 2, 3],[4, 5, 6],[7, 8, 9]]])b torch.tensor([[1], [2], [3]])A * b tensor([[[ 1, 2, 3],[ 8, 10, 12],[21, 24, 27]],[[ 1, 2, 3],[ 8, 10, 12],[21, 24, 27]]]) 3.4 张量和矩阵示例 在此示例中A 是形状为 2 3 3 的张量B 是形状为 3 3 的矩阵。 A (2, 3, 3)
B ( , 3, 3) 此示例比上一个示例更容易因为最右侧的两个维度是相同的。这意味着矩阵只需在最左侧的维度上广播即可创建 2 3 3 的形状。这只是意味着需要一个额外的矩阵。 计算哈达玛乘积时结果为 2 3 3。 A torch.tensor([[[1, 2, 3],[4, 5, 6],[7, 8, 9]],[[1, 2, 3],[4, 5, 6],[7, 8, 9]]])B torch.tensor([[1, 2, 3], [1, 2, 3], [1, 2, 3]])A * B tensor([[[ 1, 4, 9],[ 4, 10, 18],[ 7, 16, 27]],[[ 1, 4, 9],[ 4, 10, 18],[ 7, 16, 27]]]) 四、矩阵和张量乘法与点积 对于前面的所有示例目标是以相同的形状结束以允许逐元素乘法。此示例的目标是通过点积实现矩阵和张量乘法这需要第一个矩阵或张量的最后一个维度与第二个矩阵或张量的倒数第二个维度匹配。 对于矩阵乘法 m n x n r c m r 对于 3D 张量乘法 c m n x c n r c m r 对于 4D 张量乘法 z c m n x z c n r z c m r 例 对于此示例A 的形状为 2 3 3B 的形状为 3 2。截至目前最后两个维度符合点积乘法的条件。需要将维度添加到 B并且需要跨此维度广播 3 2 矩阵以创建 2 3 2 的形状。 此张量乘法的结果将是 2 3 3 x 2 3 2 2 3 2。 A torch.tensor([[[1, 2, 3],[4, 5, 6],[7, 8, 9]],[[1, 2, 3],[4, 5, 6],[7, 8, 9]]])B torch.tensor([[1, 2], [1, 2], [1, 2]])A B # A.matmul(B) tensor([[[ 6, 12],[15, 30],[24, 48]],[[ 6, 12],[15, 30],[24, 48]]]) 有关广播的其他信息可以在下面的链接中找到。有关张量及其操作的更多信息可以在此处找到。