【Pytorch】系统学习Pytorch(一)——tensor维度理解和取行列值操作

Pytorch最核心的数据类型是tensor(张量),实际上我个人觉得形式上张量就是个高维数组。但是tensor的维度如何理解,比如高维tensor我们取[:,:,:,…:,3]的时候我们取的是那些数?这涉及到对tensor维度的理解

x=torch.zeros(5,3)

输出:
tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]])

zero表示0矩阵输出为五行三列矩阵。值得注意的是,形状为(5,3)。 并不是每5个数字组成一个数组,3个数组组成一个二维矩阵,而是3个数字组成一个数组,5个数组组成一个矩阵。
因此,我们可以推断出如果形状为(5,3,6),则是6个数字组成一个数组,3个数组组成一个二维矩阵,5个矩阵组成第三个中括号。

x=torch.rand(5,3,6)
输出
tensor([[[0.7082, 0.4651, 0.0062, 0.1272, 0.7605],
         [0.5940, 0.5157, 0.6533, 0.5600, 0.0796],
         [0.4875, 0.9800, 0.6824, 0.2140, 0.0257]],

        [[0.0359, 0.4448, 0.2103, 0.2563, 0.6658],
         [0.6536, 0.5420, 0.4873, 0.0294, 0.0229],
         [0.3487, 0.1674, 0.4722, 0.9263, 0.9484]],

        [[0.4078, 0.0509, 0.2812, 0.3428, 0.0808],
         [0.2130, 0.3733, 0.8707, 0.3242, 0.7457],
         [0.8664, 0.1015, 0.7702, 0.2946, 0.4089]],

        [[0.9480, 0.9742, 0.1043, 0.5440, 0.3058],
         [0.0629, 0.8556, 0.6327, 0.6300, 0.5363],
         [0.6271, 0.1860, 0.5853, 0.7823, 0.2174]],

        [[0.8960, 0.5037, 0.5756, 0.3715, 0.7940],
         [0.9994, 0.7644, 0.1792, 0.4904, 0.0357],
         [0.3241, 0.5176, 0.5344, 0.5197, 0.6703]],

        [[0.4445, 0.0174, 0.8888, 0.9323, 0.3574],
         [0.5473, 0.9295, 0.8365, 0.8500, 0.8291],
         [0.8582, 0.1999, 0.3006, 0.6864, 0.5285]]])

tensor一些操作需要涉及到维度dim参数,比如

torch.cat([x,asd],dim=0)

向量拼接操作,后面的dim表示维度,那么加入dim=0,也就是第一个维度,到底是那个维度呢
这里我们做一个实验:

tensor1=torch.ones(5,3,6)
tensor2=torch.zeros(5,3,6)
print(torch.cat([tensor2,tensor1],dim=0))

我最开始猜的是最内部的中括号是第一个维度,因此如果dim=0则应该是一行12个值。然而并不是哈哈哈哈哈。

tensor([[[0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.]],

        [[0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.]],

        [[0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.]],

        [[0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.]],

        [[0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0., 0.]],

        [[1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.]],

        [[1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.]],

        [[1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.]],

        [[1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.]],

        [[1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1., 1.]]])

可以看出, 是拆掉最外面的中括号,然后把两个tensor拼在一起,再加上中括号换句话说,(5,3,6)中 5 才是第一个维度,最外面是第一个维度。

我们依旧拿三维tensor来举例子,因为二维太常见了,不利于理解。

tensor1=torch.rand(5,3,6)
print("0:",x)
print("1:",x[0])
print("2:",x[0][0])
print("3:",x[0,0])
print("4:",x[:,0])
print("5:",x[:,:,0])

print("6:",x[:,0,:])
输出如下:
0: tensor([[[0.7504, 0.0163, 0.1442, 0.2697, 0.5262, 0.7634],
         [0.3688, 0.5919, 0.2953, 0.1973, 0.0406, 0.2681],
         [0.6594, 0.3670, 0.4670, 0.6504, 0.2137, 0.9301]],

        [[0.2488, 0.9409, 0.9087, 0.9538, 0.8453, 0.9773],
         [0.6072, 0.7016, 0.0464, 0.2436, 0.0238, 0.7793],
         [0.7214, 0.6926, 0.7738, 0.7588, 0.0035, 0.5165]],

        [[0.3435, 0.9009, 0.1431, 0.4448, 0.0435, 0.4723],
         [0.6168, 0.9506, 0.5852, 0.2774, 0.9529, 0.0059],
         [0.0069, 0.1395, 0.8941, 0.4279, 0.0804, 0.2114]],

        [[0.3677, 0.3143, 0.8086, 0.5886, 0.3840, 0.6128],
         [0.4575, 0.2936, 0.0335, 0.4177, 0.3662, 0.9141],
         [0.3135, 0.9235, 0.2801, 0.4922, 0.8769, 0.7456]],

        [[0.4155, 0.9832, 0.0595, 0.9721, 0.5980, 0.8544],
         [0.3609, 0.6466, 0.2630, 0.5928, 0.3223, 0.3392],
         [0.3760, 0.7973, 0.2696, 0.1483, 0.9533, 0.0152]]])
1: tensor([[0.7504, 0.0163, 0.1442, 0.2697, 0.5262, 0.7634],
        [0.3688, 0.5919, 0.2953, 0.1973, 0.0406, 0.2681],
        [0.6594, 0.3670, 0.4670, 0.6504, 0.2137, 0.9301]])
2: tensor([0.7504, 0.0163, 0.1442, 0.2697, 0.5262, 0.7634])
3: tensor([0.7504, 0.0163, 0.1442, 0.2697, 0.5262, 0.7634])
4: tensor([[0.7504, 0.0163, 0.1442, 0.2697, 0.5262, 0.7634],
        [0.2488, 0.9409, 0.9087, 0.9538, 0.8453, 0.9773],
        [0.3435, 0.9009, 0.1431, 0.4448, 0.0435, 0.4723],
        [0.3677, 0.3143, 0.8086, 0.5886, 0.3840, 0.6128],
        [0.4155, 0.9832, 0.0595, 0.9721, 0.5980, 0.8544]])
5: tensor([[0.7504, 0.3688, 0.6594],
        [0.2488, 0.6072, 0.7214],
        [0.3435, 0.6168, 0.0069],
        [0.3677, 0.4575, 0.3135],
        [0.4155, 0.3609, 0.3760]])
6: tensor([[0.7504, 0.0163, 0.1442, 0.2697, 0.5262, 0.7634],
        [0.2488, 0.9409, 0.9087, 0.9538, 0.8453, 0.9773],
        [0.3435, 0.9009, 0.1431, 0.4448, 0.0435, 0.4723],
        [0.3677, 0.3143, 0.8086, 0.5886, 0.3840, 0.6128],
        [0.4155, 0.9832, 0.0595, 0.9721, 0.5980, 0.8544]])

Original: https://blog.csdn.net/AlexFaker/article/details/122526169
Author: 十了个九
Title: 【Pytorch】系统学习Pytorch(一)——tensor维度理解和取行列值操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/673760/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球