问题描述
我最近对张量有些困惑。假设我们有一个张量为(3,2,3,4)的张量,这意味着在第一维中有3组数字?还是仅仅意味着一维中只有3个数字?
然后是第二个问题,张量A的形状为(3,2),为什么torch.max(A,0)的输出返回一组包含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]))
我的意思是为什么它不返回3个最大值的列表?
然后是第三个问题,如果我们有两个形状为(3,10,2)和(2,4,1)的张量,是否可以将这两个张量在第三个维度上串联起来,考虑它们具有在那个尺寸上相同的尺寸?如果可行,背后的原因是什么?
如果您能帮助我理解这一点,我将不胜感激!
解决方法
张量只是向量的高级维度。您应该先从向量开始。例如:4个元素矢量A = [1,2,3,4]。一个6个向量A在一起是B = [[1,4],[1,4],...,[1,4]]。这称为矩阵(2维),形状为6x4。现在,如果采用2个矩阵B,它将形成张量C,形状为(2,6,4)。将C扩展为3 C的列表,可以得到4维张量(3,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,size=(2,3))
>>> a = np.random.randint(0,1,3))
>>> np.concatenate([a,b],axis=2)
否则,唯一的方法就是将2个张量都展平,这样就只需要一个向量表示a和b。
,关于您的第一个答案:考虑图片。这样一来,可视化就会很简单。或者在您的示例中,堆叠了x = np.zeros((3,4))
个3个3d张量,每个张量为(2,4)。
对于第二个问题,您至少应具有n-1个相同的维度才能连接到第n个维度。下面的图片将有助于您理解。
您提到的第三个问题max(a,0)
,其中0代表轴,基本上是列,并且正在寻找每一列的最大值。