PyTorch 上的张量操作
PyTorch 是一个开源机器学习框架,广泛应用于学术研究和工业界。它提供了充足的工具和库来有效地构建和训练神经网络。
PyTorch 中的张量
在 PyTorch 中,张量是一个多维值数组,可用于表示机器学习模型的数据。维度可能为 1D、2D、3D 等,完全取决于它们所表示数据的复杂性。
举个例子,1D 张量可用于表示一系列值,例如时间序列数据,而 2D 张量可用于表示图像,其中张量的每个元素对应于图像中的一个像素。
张量运算
张量运算是可以对张量执行的数学运算,以操纵和转换其值。PyTorch 提供了广泛的张量运算,可用于对张量执行基本运算,如算术、统计和逻辑运算。
这些操作被实现为以一个或多个张量作为输入并返回新张量作为输出的函数。
示例
在 PyTorch 中,我们使用以下示例解释如何创建张量,它将以值列表或元组作为输入。
import torch # 使用嵌套列表创建 2D 张量 a = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]]) # 打印张量 print(a)
输出
tensor([[1, 2, 3, 4], [5, 6, 7, 8]])
加法
可以使用 torch.add() 函数或 + 运算符执行张量加法。
示例
import torch # 使用嵌套列表创建 2D 张量 a = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]]) b = torch.add(a, 5) c = a + b print(b) print(c)
输出
tensor([[6, 7, 8, 9], [10, 11, 12, 13]])
减法
可以使用 torch.sub() 函数或 - 运算符执行张量减法。
示例
# 从张量的每个元素中减去一个标量值 2 以创建一个新的张量 d = torch.sub(a, 2) # 从原始张量中减去修改后的张量以创建一个新的张量 e = a - d print(d) print(e)
输出
tensor([[-1, 0, 1, 2], [3, 4, 5, 6]]) tensor([[2, 2, 2, 2], [2, 2, 2, 2]])
乘法
可以使用 torch.mul() 函数或 * 运算符执行张量乘法。
示例
# 将张量的每个元素乘以标量值 2 以创建一个新的张量 f = torch.mul(a, 2) g = a * f print(f) print(g)
输出
tensor([[2, 4, 6, 8], [10, 12, 14, 16]]) tensor([[2, 8, 18, 32], [50, 72, 98,128]])
除法
可以使用 torch.div() 函数或 / 运算符执行张量除法。
示例
# 将张量的每个元素除以标量值 2 以创建一个新张量 h = torch.div(a, 2) # 将原始张量逐个元素除以修改后的张量以创建一个新张量 i = a / h print(h) print(i)
输出
tensor([[0.5000, 1.0000, 1.5000, 2.0000], [2.5000, 3.0000, 3.5000, 4.0000]]) tensor([[2., 2., 2., 2.], [2., 2., 2., 2.]])
高级张量运算
高级张量运算包括矩阵乘法、转置、重塑和连接,这些运算基本上处理二维张量。
矩阵乘法
我们可以使用 torch.mm() 函数或 @ 运算符执行矩阵乘法。
示例
# 创建两个二维张量 A = torch.tensor([[1, 2], [3, 4]]) B = torch.tensor([[5, 6], [7, 8]]) # 使用 torch.mm() 函数执行矩阵乘法 C = torch.mm(A, B) # 我们可以使用 @ 运算符进行矩阵乘法 D = A @ B print(C) print(D)
输出
tensor([[19, 22], [43, 50]]) tensor([[19, 22], [43, 50]])
转置
张量运算中的转置是翻转张量的轴的过程。它涉及交换 2D 张量的行和列,或者更一般地说,交换任意维度的张量的轴。
我们可以使用 torch.t() 函数执行转置。
示例
# 创建 2D 张量 E = torch.tensor([[1, 2], [3, 4], [5, 6]]) # 使用 torch.t() 函数转置张量 F = torch.t(E) print(E) print(F)
输出
tensor([[1, 2], [3, 4], [5, 6]]) tensor([[1, 3, 5], [2, 4, 6]])
重塑
张量操作中的重塑是在保留其基础数据的同时更改张量的形状或维度的过程。它涉及重新排列张量的元素以适应新形状,而不改变元素总数。
我们可以使用 torch.reshape() 函数或 .view() 方法执行重塑。
示例
# 创建 2D 张量 G = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 使用 torch.reshape() 函数重塑张量 H = torch.reshape(G, (3, 2)) # 使用 .view() 方法重塑张量 I = G.view(3, 2)
输出
tensor([[1, 2, 3], [4, 5, 6]]) tensor([[1, 2], [3, 4], [5, 6]]) tensor([[1, 2], [3, 4], [5, 6]])
连接
张量运算中的连接是沿特定维度连接两个或多个张量以形成更大张量的过程。生成的张量具有新维度,该维度是输入张量的原始维度的连接。
可以使用 torch.cat() 函数执行。
示例
# 创建两个张量 J = torch.tensor([[1, 2], [3, 4]]) K = torch.tensor([[5, 6]]) # 沿第一个轴连接张量 L = torch.cat((J, K), dim=0) print(J) print(K) print(L)
输出
tensor([[1, 2], [3, 4]]) tensor([[5, 6]]) tensor([[1, 2], [3, 4], [5, 6]])
结论
PyTorch 的使用领域包括计算机视觉、自然语言处理、语音识别、推荐系统和自动驾驶汽车。
Facebook AI Research (FAIR) 广泛使用 PyTorch 来研究和开发最先进的深度学习模型。NVIDIA、Tesla 和 IBM 还使用 PyTorch 来开发自动驾驶系统、各种计算机视觉应用程序以及自然语言处理模型。