更改 PyTorch 中张量的视图
PyTorch 是一个由 Facebook 的人工智能研究团队开发的开源机器学习库。它主要用于深度学习应用,包括自然语言处理、计算机视觉和强化学习。PyTorch 提供两个主要功能:一个多维张量对象和一个对这些张量进行操作的函数集合。
Torch
PyTorch 中的张量对象类似于 NumPy 的 ndarray,但增加了利用 GPU 和构建动态计算图的功能。这些计算图是在程序执行期间动态构建的,从而可以有效地利用内存并构建更灵活的模型架构。此外,PyTorch 具有模块化设计,可以轻松构建和试验不同的神经网络模型。
PyTorch 中的 torch 模块是构建神经网络的主要库。它提供了构建各种类型神经网络的广泛构建块,包括全连接层、卷积层、循环层等等。这些构建块可以组合起来创建具有自定义架构的复杂模型。
torch 模块还包含许多用于执行神经网络中常见操作的函数,例如激活函数(例如 ReLU、sigmoid)、损失函数(例如交叉熵、均方误差)和优化算法(例如随机梯度下降、Adam)。
此外,PyTorch 中的 torch 模块包括用于数据加载和预处理的工具,以及用于评估和可视化模型性能的实用程序。它还提供了一个简单灵活的接口,用于在不同的设备上训练和部署模型,包括 CPU、GPU 和分布式计算环境。
本 PyTorch 教程将演示如何使用 PyTorch(一个与 Python 编程语言兼容的开源框架)来更改张量的形状。张量是用于数据存储的多维数组,必须导入 torch 模块才能使用它们。tensor() 方法用于创建张量。
语法
torch.tensor(data)
其中 data 是一个多维数组。
我们需要做的第一步是安装 torch 模块,我们可以使用下面显示的命令来做到这一点。
命令
pip3 install torch torchvision
运行上述命令后,torch 模块将安装到我们的机器上。
tensor.view()
在 PyTorch 中,张量的 view 方法用于在不更改底层数据的情况下重新调整张量的维度。view 方法返回一个新的张量,该张量与原始张量具有相同数量的元素,但形状不同。
PyTorch 中张量对象的 view 方法采用两个参数 r 和 c,将张量重新整形为具有 r 行和 c 列的矩阵。第一个参数指定所需的行数,第二个参数指定所需的列数。
view 方法接收一个或多个整数作为参数,这些参数指定张量所需的形状。参数可以是一个整数,在这种情况下,张量将被重新整形为具有指定长度的一维张量。或者,参数可以是一个整数元组,在这种情况下,张量将被重新整形为具有指定形状的张量。
例如,假设我们有一个形状为 (2, 3, 4) 的张量,它表示一个三维张量,其中包含 2 个矩阵,每个矩阵具有 3 行和 4 列。我们可以使用 view 方法将此张量重新整形为形状为 (2, 12) 的二维张量,如下所示
示例
import torch # create a tensor with shape (2, 3, 4) x = torch.randn(2, 3, 4) # reshape the tensor into a 2-dimensional tensor with shape (2, 12) y = x.view(2, 12) print(x.shape) # prints (2, 3, 4) print(y.shape) # prints (2, 12)
要运行以上代码,我们需要运行下面显示的命令。
命令
python3 main.py
运行上述命令后,我们可以预期输出与下面显示的输出相同。
输出
torch.Size([2, 3, 4]) torch.Size([2, 12])
请注意,原始张量中的元素数量必须与重新整形后的张量中的元素数量相同。换句话说,原始张量的维度的乘积必须等于重新整形后的张量的维度的乘积。
此外,view 方法返回一个新的张量,该张量与原始张量共享相同的底层数据。这意味着如果修改了原始张量,则重新整形后的张量也将受到影响。但是,如果修改了重新整形后的张量,则原始张量不会受到影响。
现在让我们创建一个张量,并使用 view 模块获得不同变化的列和行。
请考虑以下代码。
示例
# import torch module
import torch
# create a 1D tensor with Float data type that holds 6 elements
data1 = torch.FloatTensor([23, 45, 54, 32, 23, 78])
# display the original tensor
print("Original Tensor: ", data1)
# reshape the tensor into a 3x2 matrix and display
print("Reshaped Tensor: ", data1.view(3, 2))
解释
代码使用 PyTorch 库创建一个包含 6 个浮点值的 1 维张量 data1。然后使用 print() 函数显示原始张量。
接下来,使用 view() 方法将张量重新整形为 3x2 矩阵,即具有 3 行和 2 列的矩阵。然后使用另一个 print() 语句显示生成的重新整形后的张量。
总之,代码演示了如何使用 view() 方法创建和操作 PyTorch 中的张量以重新整形张量。
要运行以上代码,我们需要运行下面显示的命令。
命令
python3 main.py
运行上述命令后,我们可以预期输出与下面显示的输出相同。
输出
Original Tensor: tensor([23., 45., 54., 32., 23., 78.])
Reshaped Tensor: tensor([[23., 45.],
[54., 32.],
[23., 78.]])
张量已被重新整形为具有 3 行和 2 列。
现在让我们将张量的视图更改为 2 行和 3 列。
请考虑以下代码。
示例
# import torch module
import torch
# create a 1D tensor with Float data type that holds 6 elements
data1 = torch.FloatTensor([23, 45, 54, 32, 23, 78])
# display the original tensor
print("Original Tensor: ", data1)
# reshape the tensor into a 2x3 matrix and display
print("Reshaped Tensor: ", data1.view(2, 3))
解释
此代码导入 PyTorch 库并创建一个包含 6 个浮点值的 1 维张量 data1。然后使用 print() 函数显示原始张量。
然后使用 view() 方法将张量重新整形为 2x3 矩阵,即具有 2 行和 3 列的矩阵。然后使用另一个 print() 语句显示生成的重新整形后的张量。
要运行以上代码,我们需要运行下面显示的命令。
命令
python3 main.py
运行上述命令后,我们可以预期输出与下面显示的输出相同。
输出
Original Tensor: tensor([23., 45., 54., 32., 23., 78.])
Reshaped Tensor: tensor([[23., 45., 54.],
[32., 23., 78.]])
在以上两个示例中,我们都使用 view 方法更改了张量的视图,如果需要,我们还可以更改数据类型。
请考虑以下代码。
示例
# import torch module
import torch
# create a 1D tensor with Float data type that holds 6 elements
data1 = torch.FloatTensor([15.5, 18.7, 21.3, 26.1, 30.2, 35.9])
# display the data type of the original tensor
print("Original Tensor data type: ", data1.dtype)
# change the data type of data1 to int8 and display the new data type
print("Converting to int8: ", data1.view(torch.int8).dtype)
# change the data type of data1 to int16 and display the new data type
print("Converting to int16: ", data1.view(torch.int16).dtype)
# change the data type of data1 to int32 and display the new data type
print("Converting to int32: ", data1.view(torch.int32).dtype)
# change the data type of data1 to int64 and display the new data type
print("Converting to int64: ", data1.view(torch.int64).dtype)
解释
代码创建了一个名为 data1 的 1 维张量,其数据类型为 FloatTensor,它包含 6 个元素:23、45、54、32、23 和 78。print() 函数用于显示原始张量。
接下来,将 view() 方法应用于 data1 以将其形状更改为 3x2 矩阵。view() 方法采用两个参数,指定张量所需的形状。在这种情况下,张量被重新整形为 3 行和 2 列。然后打印重新整形后的张量。
此代码演示了如何使用 view() 方法更改 PyTorch 中张量的形状。通过更改张量的形状,我们可以操作底层数据的组织和访问方式,这在各种应用程序中都很有用。
要运行以上代码,我们需要运行下面显示的命令。
命令
python3 main.py
运行上述命令后,我们可以预期输出与下面显示的输出相同。
输出
Original Tensor data type: torch.float32 Converting to int8: torch.int8 Converting to int16: torch.int16 Converting to int32: torch.int32 Converting to int64: torch.int64
结论
总之,PyTorch 是一个功能强大的开源框架,用于机器学习和深度学习任务。它提供了一系列工具和函数来帮助用户操作和分析数据,包括创建和修改张量。张量是可以保存各种数据类型的多维数组,它们是 PyTorch 的基本构建块。
张量的一个重要功能是能够重新整形它们,这可以使用 view() 方法来完成。此方法允许用户更改张量的形状而不修改其底层数据,使其成为一种灵活高效的数据操作工具。通过使用 view() 方法,用户可以轻松更改张量的形状以满足其特定需求,无论这是否涉及将一维张量转换为二维张量或重新排列张量的维度。
总的来说,能够更改 PyTorch 中张量的视图对于机器学习和深度学习应用来说是一个宝贵的工具,允许用户有效地操作和分析数据。使用 PyTorch,用户可以访问一个功能强大且灵活的框架来构建和训练机器学习模型,并且能够重新整形张量只是提供的众多工具之一,可以帮助他们做到这一点。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP