如何在 Pytorch 中切片 3D 张量?


Python 中的 3D 张量以其矩阵数组而闻名,而 1D 和 2D 张量分别表示向量和矩阵。Pytorch 是基于 Python 编程语言的机器学习框架的开源模块,它提供了名为 torch 的模块。在 Python 中,我们有一些内置函数,如 randn()、rand() 和 split(),可用于表示 Pytorch 中 3D 张量的切片。

语法

以下语法在示例中使用:

import torch

这是一个 Python 模块,它保存所有神经网络的基类。它有助于构建和训练神经网络,例如输入、输出和隐藏层。

randn() 

这是一个 NumPy 库内置函数,可用于从数组中设置标准正态分布的随机样本。

rand()

这是 Python 的一个内置函数,用于生成伪随机数。

split()

这是 Python 中的内置方法,用于将字符串转换为列表。

安装要求

pip install torch

此模块有助于基于 1D、2D 和 3D 张量运行程序。

示例 1

在以下示例中,我们将通过导入 torch 模块来启动程序。然后使用名为 **randn()** 的内置方法,该方法遵循 **torch** 模块,接受一些整数作为参数以列表的形式分配数组的平均标准,并将其存储在变量 **a** 中。然后连续初始化三个变量 - b、c 和 d,它们将通过保留其元素来切片维度。接下来,使用 print 函数依次设置所有变量并获取结果。

import torch
a = torch.randn(1,2,3)

# Slicing of the first dimension by keeping the first element
b = x[0:1,:,:]

# Slicing of the second dimension by keeping the second element
c = x[:,0:2,:]

# Slicing of the third dimension by keeping the third element
d = x[:,:,-2:]
print(a)
print(b)
print(c)
print(d)

输出

tensor([[[ 0.1352, -0.8739, -1.5743],
         [-0.4853,  0.7519,  0.9749]]])
tensor([[[-0.7441,  0.3385, -1.0671,  1.0431],
         [ 0.2104, -0.3083,  1.1756,  0.3387],
         [ 0.8722,  0.4534,  0.5528, -0.3567]]])
tensor([[[-0.7441,  0.3385, -1.0671,  1.0431],
         [ 0.2104, -0.3083,  1.1756,  0.3387]],

        [[ 0.6623,  1.3858, -1.0033, -0.5977],
         [ 1.1141, -0.8058,  1.5914,  0.6476]]])
tensor([[[-1.0671,  1.0431],
         [ 1.1756,  0.3387],
         [ 0.5528, -0.3567]],

        [[-1.0033, -0.5977],
         [ 1.5914,  0.6476],
         [ 1.6480, -0.9212]]])

示例 2

在以下示例中,通过导入 torch 模块来开始程序。然后将三个数组列表的总和存储在变量 tensor_3d 中。接下来,将列表的第 0 个索引存储在变量 tensor 中。同样,将 list1 和 list2 分别存储在变量 tensor1 和 tensor2 中。然后在所有张量变量的帮助下打印结果。

import torch
tensor_3d = ([[[10, 20, 30, 40],[50, 60, 70, 80],[1, 2, 3, 4]],
   [[13, 14, 15, 16],[21, 22, 23, 24], [3, 4, 5, 6]],
   [[61, 62, 63, 64],[71, 72, 73, 74],[7, 8, 9, 10]]])
tensor = tensor_3d[0]
tensor1 = tensor_3d[1]
tensor2 = tensor_3d[2]
print("The first dimension:",tensor)
print("The second dimension:",tensor1)
print("The third dimension:",tensor2)

输出

The first dimension: [[10, 20, 30, 40], [50, 60, 70, 80], [1, 2, 3, 4]]
The second dimension: [[13, 14, 15, 16], [21, 22, 23, 24], [3, 4, 5, 6]]
The third dimension: [[61, 62, 63, 64], [71, 72, 73, 74], [7, 8, 9, 10]]

示例 3

在以下示例中,通过导入必要的名为 torch 和 random 的模块来开始程序,该模块将生成具有随机值的矩阵数组。然后 torch.rand((3, 4, 8)) 创建 0 到 1 之间的随机值并将其存储在变量 x 中。接下来,torch.split() 接受三个参数 - x、3 和 2,它们将张量 x 沿第三维度 (2) 分成块,每个块的大小为 3,并将其存储在变量 slices 中。最后,我们使用变量 **slices** 打印结果。

请注意,块是指通过沿特定维度划分原始张量而创建的较小张量。

import torch
import random

# generate the random values between 0 and 1
x = torch.rand((3,4,8))
slices = torch.split(x, 3, 2)
print(slices)

输出

(tensor([[[0.3747, 0.4710, 0.4233, 0.2445],
         [0.9414, 0.6634, 0.6091, 0.8761],
         [0.7911, 0.8687, 0.8468, 0.8766],
         [0.8192, 0.1498, 0.7685, 0.4718]],

        [[0.4160, 0.7172, 0.4647, 0.4860],
         [0.7074, 0.9610, 0.4967, 0.7411],
         [0.2269, 0.8565, 0.8671, 0.3461],
         [0.0397, 0.0809, 0.2017, 0.1106]],

        [[0.6528, 0.7044, 0.7829, 0.1844],
         [0.4297, 0.2802, 0.4159, 0.4485],
         [0.5843, 0.6958, 0.8991, 0.3918],
         [0.2549, 0.9363, 0.3098, 0.7053]]]), tensor([[[0.0095, 0.4314, 0.6110, 0.4594],
         [0.8541, 0.7622, 0.3550, 0.7715],
         [0.5951, 0.9786, 0.3598, 0.2587],
         [0.5516, 0.6523, 0.5176, 0.1267]],

        [[0.8616, 0.3667, 0.0145, 0.9252],
         [0.5995, 0.3094, 0.0483, 0.1996],
         [0.1004, 0.1373, 0.3303, 0.0982],
         [0.2414, 0.7782, 0.8850, 0.1027]],

        [[0.0559, 0.8675, 0.7974, 0.6309],
         [0.3900, 0.4914, 0.4957, 0.5973],
         [0.6249, 0.8075, 0.6700, 0.7789],
         [0.6211, 0.9158, 0.6633, 0.2306]]]))

结论

我们讨论了 Pytorch 中所有类型的张量。Pytorch 简称为 N 维或高维张量。以上输出使用了各种内置函数,如 split()、randn() 和 rand(),这些函数有助于以 3D 张量的形式获取结果。张量的各种应用被用于物理学、工程学和计算机科学领域。

更新于:2023 年 7 月 17 日

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告