在深度学习领域,PyTorch 是一个广受欢迎的开源机器学习库,而张量(Tensor)则是 PyTorch 中最核心的数据结构,类似于 NumPy 中的多维数组。张量可以在 GPU 上进行加速计算,这对于处理大规模数据和复杂模型至关重要。本文将详细介绍在 PyTorch 中创建张量的各种方法。
我们可以使用 torch.tensor()
函数直接从 Python 列表或 NumPy 数组创建张量。
import torch
import numpy as np
# 从 Python 列表创建张量
data = [[1, 2], [3, 4]]
x_data = torch.tensor(data)
print("从 Python 列表创建的张量:")
print(x_data)
# 从 NumPy 数组创建张量
np_array = np.array(data)
x_np = torch.tensor(np_array)
print("\n从 NumPy 数组创建的张量:")
print(x_np)
torch.tensor(data)
:将 Python 列表 data
转换为 PyTorch 张量。torch.tensor(np_array)
:将 NumPy 数组 np_array
转换为 PyTorch 张量。可以使用以下几种方法从已有的张量创建新的张量,新张量将继承原张量的属性(如形状、数据类型等),但可以通过指定参数进行修改。
torch.zeros_like()
创建一个与原张量形状相同,但所有元素都为 0 的新张量。
x_zeros = torch.zeros_like(x_data)
print("\n使用 zeros_like 创建的张量:")
print(x_zeros)
torch.ones_like()
创建一个与原张量形状相同,但所有元素都为 1 的新张量。
x_ones = torch.ones_like(x_data)
print("\n使用 ones_like 创建的张量:")
print(x_ones)
torch.rand_like()
创建一个与原张量形状相同,元素值在 [0, 1) 之间随机分布的新张量。
x_rand = torch.rand_like(x_data, dtype=torch.float)
print("\n使用 rand_like 创建的张量:")
print(x_rand)
可以使用 torch.zeros()
、torch.ones()
、torch.rand()
等函数根据指定的形状创建张量。
torch.zeros()
创建一个指定形状,所有元素都为 0 的张量。
shape = (2, 3)
zeros_tensor = torch.zeros(shape)
print("\n使用 zeros 创建的张量:")
print(zeros_tensor)
torch.ones()
创建一个指定形状,所有元素都为 1 的张量。
ones_tensor = torch.ones(shape)
print("\n使用 ones 创建的张量:")
print(ones_tensor)
torch.rand()
创建一个指定形状,元素值在 [0, 1) 之间随机分布的张量。
rand_tensor = torch.rand(shape)
print("\n使用 rand 创建的张量:")
print(rand_tensor)
以下是创建张量的方法总结表格:
| 方法 | 描述 | 示例 |
| —- | —- | —- |
| torch.tensor()
| 直接从 Python 列表或 NumPy 数组创建张量 | torch.tensor([[1, 2], [3, 4]])
|
| torch.zeros_like()
| 创建与原张量形状相同,元素全为 0 的张量 | torch.zeros_like(x_data)
|
| torch.ones_like()
| 创建与原张量形状相同,元素全为 1 的张量 | torch.ones_like(x_data)
|
| torch.rand_like()
| 创建与原张量形状相同,元素随机分布的张量 | torch.rand_like(x_data)
|
| torch.zeros()
| 创建指定形状,元素全为 0 的张量 | torch.zeros((2, 3))
|
| torch.ones()
| 创建指定形状,元素全为 1 的张量 | torch.ones((2, 3))
|
| torch.rand()
| 创建指定形状,元素随机分布的张量 | torch.rand((2, 3))
|
通过以上介绍的方法,我们可以根据不同的需求在 PyTorch 中灵活地创建张量。这些方法是使用 PyTorch 进行深度学习任务的基础,熟练掌握它们将有助于我们更好地构建和训练模型。