pytorch中数组维度的理解

pytorch中数组维度理解与numpy中类似,pytorch中维度用dim表示,numpy中用axis表示
这里主要想说下维度的变化。
dim = x ,表示在第x为上进行操作,那个维度会发生变化。

一、二维数组

1. 两个二维数组的拼接

维度为(2,3)与(2,4)的数组拼接后的维度是(2,7)

import torch
a = torch.Tensor(np.arange(6).reshape(2,3))
b = torch.Tensor(np.arange(8).reshape(2,4))
print(a,'\n ',a.shape)
print(b,'\n',b.shape)
c = torch.cat((a,b),dim = 1)
print('concatenate:\n',c,'\n',c.shape)

结果

tensor([[0., 1., 2.],
        [3., 4., 5.]]) 
 a: torch.Size([2, 3])
tensor([[0., 1., 2., 3.],
        [4., 5., 6., 7.]]) 
 torch.Size([2, 4])
concatenate:
 tensor([[0., 1., 2., 0., 1., 2., 3.],
        [3., 4., 5., 4., 5., 6., 7.]]) 
 torch.Size([2, 7])
2. 二维数组求sum、max等

dim = 0,第一个维度划掉,得到一个一维向量。比如,a是(2,3),dim = 0,得到的结果是(3,)维的;如果dim=1,得到的结果是(2,)

print('sum dim=0',torch.sum(a,dim=0))
print('sum dim=1',torch.sum(a,dim=1))
print('******* max *****')
print('max dim=0',torch.max(a,dim=0))
print('max dim=1',torch.max(a,dim=1))

输出

tensor([[0., 1., 2.],
        [3., 4., 5.]]) 
 torch.Size([2, 3])
sum dim=0 tensor([3., 5., 7.])
sum dim=1 tensor([ 3., 12.])
******* max *****
max dim=0 torch.return_types.max(
values=tensor([3., 4., 5.]),
indices=tensor([1, 1, 1]))
max dim=1 torch.return_types.max(
values=tensor([2., 5.]),
indices=tensor([2, 2]))

二、三维数组

1. 两个三维数组的拼接

两个三位数组拼接,有个要求,除了dim维,其余维的维度要相同。

  • 比如 a是(2,3,4),b是(3,2,4)那么a与b无论在哪个维上都不能拼接。因为它们没有两个相同的维度
  • 如果a与b维度相同,都是(2,3,4),那么他们无论在哪个维上都可以拼接。dim = 0,结果是(4,3,4),dim = 1,结果是(2,6,4),dim =2,结果是(2,3,8)
  • dim = x,就将两个数组dim维上的数字相加,得到最终输出维度。
a = torch.Tensor(np.arange(24).reshape(2,3,4))
b = torch.Tensor(np.arange(24,48).reshape(2,3,4))
print(a,'\n ',a.shape)
print(b,'\n',b.shape)
c = torch.cat((a,b),dim = 2)
print('concatenate:\n',c,'\n',c.shape)

输出结果

tensor([[[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.]],

        [[12., 13., 14., 15.],
         [16., 17., 18., 19.],
         [20., 21., 22., 23.]]]) 
  torch.Size([2, 3, 4])
tensor([[[24., 25., 26., 27.],
         [28., 29., 30., 31.],
         [32., 33., 34., 35.]],

        [[36., 37., 38., 39.],
         [40., 41., 42., 43.],
         [44., 45., 46., 47.]]]) 
 torch.Size([2, 3, 4])
concatenate:
 tensor([[[ 0.,  1.,  2.,  3., 24., 25., 26., 27.],
         [ 4.,  5.,  6.,  7., 28., 29., 30., 31.],
         [ 8.,  9., 10., 11., 32., 33., 34., 35.]],

        [[12., 13., 14., 15., 36., 37., 38., 39.],
         [16., 17., 18., 19., 40., 41., 42., 43.],
         [20., 21., 22., 23., 44., 45., 46., 47.]]]) 
 torch.Size([2, 3, 8])
2. 三维数组求sum、max等
  • 类似于二维数组,会消去dim维度
  • shape=(2,3,4)的数组,在dim=0上求和或者取最大后,结果的shape = (3,4)
  • pytorch求max,同时返回两个值(max,indices)
a = torch.Tensor(np.arange(24).reshape(2,3,4))
print(a,'\n',a.shape)
print('sum dim=0',torch.sum(a,dim=0))
print('sum dim=1',torch.sum(a,dim=1))
print('sum dim=2',torch.sum(a,dim=2))
print('******* max *****')
print('max dim=0',torch.max(a,dim=0))
print('max dim=1',torch.max(a,dim=1))
print('max dim=2',torch.max(a,dim=2))

结果

tensor([[[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.]],

        [[12., 13., 14., 15.],
         [16., 17., 18., 19.],
         [20., 21., 22., 23.]]]) 
 torch.Size([2, 3, 4])
sum dim=0 tensor([[12., 14., 16., 18.],
        [20., 22., 24., 26.],
        [28., 30., 32., 34.]])
sum dim=1 tensor([[12., 15., 18., 21.],
        [48., 51., 54., 57.]])
sum dim=2 tensor([[ 6., 22., 38.],
        [54., 70., 86.]])
******* max *****
max dim=0 torch.return_types.max(
values=tensor([[12., 13., 14., 15.],
        [16., 17., 18., 19.],
        [20., 21., 22., 23.]]),
indices=tensor([[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]))
max dim=1 torch.return_types.max(
values=tensor([[ 8.,  9., 10., 11.],
        [20., 21., 22., 23.]]),
indices=tensor([[2, 2, 2, 2],
        [2, 2, 2, 2]]))
max dim=2 torch.return_types.max(
values=tensor([[ 3.,  7., 11.],
        [15., 19., 23.]]),
indices=tensor([[3, 3, 3],
        [3, 3, 3]]))

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyTorch 是一个开源的深度学习库,它提供了高度灵活的神经网络构建和训练能力。其最大的特点是动态计算图机制,这意味着我们可以在模型训练过程动态地修改、调整网络结构,使得它非常适合研究和实验。下面是关于 PyTorch 的几个重要特性: 1. 动态计算图:PyTorch 使用动态计算图机制,与静态计算图相比,动态计算图可以根据需要灵活地构建、修改和调整网络结构,这使得我们可以更容易理解和调试模型。此外,动态计算图还支持更复杂的模型,例如递归神经网络(RNN)等。 2. 张量操作与自动微分:PyTorch 提供了丰富的张量操作库,可以高效地进行向量和矩阵计算。此外,PyTorch 还支持自动微分,可以自动计算梯度,并且梯度在反向传播时自动更新。 3. 大量的预训练模型:PyTorch 社区提供了大量的预训练模型,这些模型在各种任务上经过了大规模的训练和优化,通常可以用于迁移学习等应用。 4. GPU 加速和分布式训练:PyTorch 支持 GPU 加速,可以利用 GPU 的强大计算能力加速模型训练。此外,PyTorch 还支持分布式训练,可以在多台计算机上同时训练模型,加快训练速度。 5. 简洁的代码:PyTorch 的 API 设计得相对简洁明了,使得用户能够更加直观地理解和使用库的功能。此外,PyTorch 建立在 Python 上,使得其代码易于编写和调试。 总而言之,PyTorch 是一个功能强大、灵活易用的深度学习库,具有动态计算图、张量操作和自动微分、大量的预训练模型、GPU 加速和分布式训练等特性。它在学术研究得到广泛应用,同时也被广大的工业界和开发者社区认可和使用。 ### 回答2: PyTorch是一个开源的机器学习库,其目的是为了让用户能够更加方便地构建和训练深度神经网络模型。 首先,PyTorch提供了一个灵活的张量计算库,这使得用户可以使用类似于NumPy的语法来进行张量操作。张量是PyTorch最基本的数据结构,可以表示任意维度数组。这使得PyTorch在处理各种类型的数据(如图像、文本、声音等)时变得非常方便。 其次,PyTorch采用了动态图的方法来构建计算图。这意味着用户可以在运行时定义计算图,并且可以根据需要进行修改。相比之下,其他框架(如TensorFlow)使用的是静态图,用户需要在编写代码之前定义整个计算图。动态图使得PyTorch更加易于调试和理解,同时也提供了更大的灵活性。 此外,PyTorch具有丰富的工具和资源,用于帮助用户进行模型训练和部署。例如,它提供了许多预先训练的模型,可以直接用于特定的任务。此外,PyTorch还提供了一些用于数据加载和处理的工具,使得用户能够高效地管理和处理大型数据集。 最后,PyTorch具有优秀的社区支持和文档资源。无论是初学者还是专业人士,都可以从社区获取有关PyTorch的帮助和指导。此外,PyTorch官方文档详尽而清晰,提供了大量的示例代码和教程,帮助用户快速上手和理解PyTorch的各个功能。 总之,PyTorch是一个功能强大且易于使用的机器学习库,为用户提供了丰富的工具和资源,帮助他们构建和训练深度神经网络模型。无论是在学术研究还是工业应用PyTorch都是一个理想的选择。 ### 回答3: PyTorch是一个基于Python的开源机器学习库,被广泛应用于深度学习领域。它提供了丰富的工具和接口,便于用户构建和训练各种神经网络模型。 首先,PyTorch的设计理念是以动态计算图为核心。这意味着PyTorch允许用户在运行时动态地定义、修改和调整计算图,极大地提高了灵活性和可调试性。相比之下,其他许多深度学习框架比如TensorFlow则采用了静态计算图的方式,需要用户先定义好整个计算图再进行训练。 其次,PyTorch还具有良好的易用性和可读性。它的API设计简洁明了,语法与Python非常相似,使得编写模型和训练代码变得更加容易和直观。此外,PyTorch内置了许多实用的工具和函数,比如数据加载、模型优化、损失函数等,大大简化了深度学习流程的实现。 另外,PyTorch具有优秀的性能表现。它充分利用了现代GPU的并行计算能力,能够高效地处理大规模数据和复杂模型。此外,PyTorch还提供了分布式训练的支持,可以通过多台机器或多个GPU实现模型的并行训练,加速训练速度。 最后,PyTorch还积极推动深度学习社区的发展。它具有一个活跃的社区,提供了丰富的教程、示例和文档,方便用户学习和使用。同时,PyTorch也是很多顶尖研究机构和公司所选择的深度学习框架,很多前沿的研究成果都在PyTorch上实现和发布。 综上所述,PyTorch作为一款强大的深度学习库,以其动态计算图、易用性、性能表现和社区支持等优势,被广泛认可并应用于各个领域的深度学习任务。无论是学术研究还是工业应用,PyTorch都为用户提供了丰富的工具和资源,帮助他们快速搭建和训练高效的神经网络模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值