如何理解多维张量?
How to understand tensors with multiple dimensions?
最近我对张量有点困惑。假设我们有一个形状为 (3,2,3,4) 的张量,我们的意思是在第一维中有 3 组数字?或者它只是意味着在第一维中恰好只有 3 个数字?
那么第二个问题来了,张量A的形状是(3,2),为什么torch.max(A,0)returns的输出是一组考虑到第一维中有 3 个数字这一事实,包含 2 个而不是 3 个最大值的最大值。
>>>a = torch.randn(3,2)
a tensor([[-1.1254, -0.1549],
[-0.5308, 1.0427],
[-0.1268, 1.0866]])
>>>torch.max(a,0)
torch.return_types.max(
values=tensor([-0.1268, 1.0866]),
indices=tensor([2, 2]))
我的意思是为什么它不 return 一个包含 3 个最大值的列表?
那么第三个问题,如果我们有两个形状为(3,3,10,2) 和(2,4,10,1) 的张量,考虑到它们,我们是否可以在三维上将这两个张量连接起来在那个维度上有相同的大小吗?如果可行,背后的原因是什么?
如果你能帮助我理解这一点,我将不胜感激!
张量只是向量的高级维度。你应该先从一个向量开始。例如:4 元素向量 A = [1,2,3,4]。一个 6 向量 A 一起是 B = [[1,2,3,4],[1,2,3,4],...,[1,2,3,4]]。这叫做矩阵(2维),形状是6x4。现在如果你取2个矩阵B,它会形成一个张量C,形状是(2,6,4)。将C扩展为3个C的列表,可以得到4维张量(3,2,6,4)等。你可以拍这张照片更好地说明。
对于最大手电筒,torch.max(input, dim, keepdim=False, out=None)
当您选择 dim=0 时(尺寸减小到这意味着您将找到沿 0 轴的最大值(也称为第一个形状),它将跟随这个轴找到对应于剩余张量的最大数(根据你的张量,你只需要检查 2 个元素向量),它是左边的。如果你将它扩展到更高的维度,比如(3,4,5)形状,最大值为 (4,5)。
对于最后一个问题,那个张量没有。因为当你看插图的时候,你没有办法只根据 1 个形状来连接 2 个不同大小的匹配张量。除了要连接的维度之外,您必须为所有维度保持相同的形状。
>>> b = np.random.randint(0,2,size=(2,3,2,3))
>>> a = np.random.randint(0,2,size=(2,3,1,3))
>>> np.concatenate([a,b],axis=2)
否则,唯一的方法是将两个张量都展平,这样您只需要一个表示 a 和 b 的向量。
关于你的第一个答案:想想图像。这样就很容易可视化。或者在您的示例中,x = np.zeros((3,2,3,4))
堆叠了 3 个具有 (2,3,4) 个维度的 3d 张量。
对于第二个问题,您应该至少有 n-1 个相同的维度来连接 n-th 维度。下图有助于理解。
你提到的第三个问题 max(a,0)
,其中 0 代表轴,基本上是列,它正在为每一列寻找最大值。
最近我对张量有点困惑。假设我们有一个形状为 (3,2,3,4) 的张量,我们的意思是在第一维中有 3 组数字?或者它只是意味着在第一维中恰好只有 3 个数字?
那么第二个问题来了,张量A的形状是(3,2),为什么torch.max(A,0)returns的输出是一组考虑到第一维中有 3 个数字这一事实,包含 2 个而不是 3 个最大值的最大值。
>>>a = torch.randn(3,2)
a tensor([[-1.1254, -0.1549],
[-0.5308, 1.0427],
[-0.1268, 1.0866]])
>>>torch.max(a,0)
torch.return_types.max(
values=tensor([-0.1268, 1.0866]),
indices=tensor([2, 2]))
我的意思是为什么它不 return 一个包含 3 个最大值的列表?
那么第三个问题,如果我们有两个形状为(3,3,10,2) 和(2,4,10,1) 的张量,考虑到它们,我们是否可以在三维上将这两个张量连接起来在那个维度上有相同的大小吗?如果可行,背后的原因是什么?
如果你能帮助我理解这一点,我将不胜感激!
张量只是向量的高级维度。你应该先从一个向量开始。例如:4 元素向量 A = [1,2,3,4]。一个 6 向量 A 一起是 B = [[1,2,3,4],[1,2,3,4],...,[1,2,3,4]]。这叫做矩阵(2维),形状是6x4。现在如果你取2个矩阵B,它会形成一个张量C,形状是(2,6,4)。将C扩展为3个C的列表,可以得到4维张量(3,2,6,4)等。你可以拍这张照片更好地说明。
对于最大手电筒,torch.max(input, dim, keepdim=False, out=None)
当您选择 dim=0 时(尺寸减小到这意味着您将找到沿 0 轴的最大值(也称为第一个形状),它将跟随这个轴找到对应于剩余张量的最大数(根据你的张量,你只需要检查 2 个元素向量),它是左边的。如果你将它扩展到更高的维度,比如(3,4,5)形状,最大值为 (4,5)。
对于最后一个问题,那个张量没有。因为当你看插图的时候,你没有办法只根据 1 个形状来连接 2 个不同大小的匹配张量。除了要连接的维度之外,您必须为所有维度保持相同的形状。
>>> b = np.random.randint(0,2,size=(2,3,2,3))
>>> a = np.random.randint(0,2,size=(2,3,1,3))
>>> np.concatenate([a,b],axis=2)
否则,唯一的方法是将两个张量都展平,这样您只需要一个表示 a 和 b 的向量。
关于你的第一个答案:想想图像。这样就很容易可视化。或者在您的示例中,x = np.zeros((3,2,3,4))
堆叠了 3 个具有 (2,3,4) 个维度的 3d 张量。
对于第二个问题,您应该至少有 n-1 个相同的维度来连接 n-th 维度。下图有助于理解。
你提到的第三个问题 max(a,0)
,其中 0 代表轴,基本上是列,它正在为每一列寻找最大值。