基于pytorch对张量的使用
1、什么是张量
张量(Tensor)是机器学习和深度学习中的基本构建模块,类似于多维数组。张量在深度学习框架如PyTorch中被广泛使用,其核心在于能够有效地进行高维数据的处理和计算。
- 0维张量:标量
- 1维张量:向量
- 2维张量:矩阵
- 多维张量:多维数组
import torch
# 0维张量:标量
scalar = torch.tensor(7)
print(scalar.ndim) # 输出0
# 1维张量:向量
vector = torch.tensor([7, 7])
print(vector.ndim) # 输出1
# 2维张量:矩阵
matrix = torch.tensor([[7, 8], [9, 10]])
print(matrix.ndim) # 输出2
# 多维张量
tensor = torch.tensor([[[1, 2, 3], [3, 6, 9], [2, 4, 5]]])
print(tensor.ndim) # 输出3
2、张量的创建
2.1 基本创建方式
(1). 根据已有数据创建张量
(2). 根据形状创建张量
import torch
import numpy as np
# 根据已有数据创建张量
data1 = torch.tensor(10)
data2 = torch.tensor(np.random.randn(2, 3))
data3 = torch.tensor([[10., 20., 30.], [40., 50., 60.]])
# 创建指定形状的张量
data4 = torch.Tensor(2, 3)
data5 = torch.IntTensor(2, 3)
data6 = torch.FloatTensor()
2.2 创建线性和随机张量
(1) 线性张量
(2) 随机张量
import torch
# 线性张量
data1 = torch.arange(0, 10, 2)
data2 = torch.linspace(0, 11, 10)
# 随机张量
data3 = torch.randn(2, 3)
torch.random.manual_seed(100) # 设置随机种子
data4 = torch.randn(2, 3)
2.3 创建01张量
(1) 全0张量
(2) 全1张量
(3) 全指定值张量
import torch
# 全0张量
data1 = torch.zeros(2, 3)
data2 = torch.zeros_like(data1)
# 全1张量
data3 = torch.ones(2, 3)
data4 = torch.ones_like(data3)
# 全指定值张量
data5 = torch.full([2, 3], 10)
data6 = torch.full_like(data5, 20)
3、张量与Numpy之间的转换
张量和Numpy数组之间的转换在深度学习的实现过程中非常常见。通过这种转换,可以利用Numpy的丰富库函数和PyTorch的高效计算能力。
import torch
import numpy as np
# 张量转换为Numpy数组
tensor = torch.tensor([2, 3, 4])
numpy_array = tensor.numpy()
# Numpy数组转换为张量
numpy_array = np.array([2, 3, 4])
tensor = torch.from_numpy(numpy_array)
4、张量的数值计算
张量提供了丰富的数值计算函数,如加法、减法、乘法、除法等,且这些操作可以直接在GPU上进行,大大加快了计算速度。
import torch
tensor1 = torch.tensor([1.0, 2.0, 3.0])
tensor2 = torch.tensor([4.0, 5.0, 6.0])
# 加法
result_add = tensor1 + tensor2
# 减法
result_sub = tensor1 - tensor2
# 乘法
result_mul = tensor1 * tensor2
# 除法
result_div = tensor1 / tensor2
5、张量的高级特性
5.1 张量的广播机制
广播(Broadcasting)是一种用于处理不同形状的张量进行运算的机制。通过广播,PyTorch可以将较小的张量自动扩展为较大的张量,以便进行逐元素的操作。
# 张量广播
tensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.tensor([[1], [2], [3]])
result = tensor1 + tensor2
print(result) # 输出:tensor([[2, 3, 4], [3, 4, 5], [4, 5, 6]])
5.2 自动求导
张量的’‘requires_grad’'属性可以让张量记录操作历史,以便进行自动微分。这在训练神经网络时非常有用。
# 自动求导
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x * 2
z = y.mean()
# 反向传播
z.backward()
print(x.grad) # 输出:tensor([0.6667, 0.6667, 0.6667])
5.3 张量的操作函数
PyTorch提供了大量的张量操作函数,可以用于各种数据处理和模型训练任务。
# 张量的各种操作
tensor = torch.tensor([1.0, 2.0, 3.0])
print(tensor.sum()) # 输出:tensor(6.)
print(tensor.mean()) # 输出:tensor(2.)
print(tensor.max()) # 输出:tensor(3.)
print(tensor.min()) # 输出:tensor(1.)
print(tensor.sqrt()) # 输出:tensor([1.0000, 1.4142, 1.7321]
’
结语
张量作为机器学习和深度学习的基础模块,其重要性不言而喻。通过本文的介绍,可以看出张量在数据处理、数值计算等方面的强大功能。特别是在PyTorch中,张量的操作接口设计简洁且高效,极大地方便了用户的使用。
除了基本的创建和运算外,张量的广播机制、自动求导等特性也是其强大的原因之一。在实际应用中,掌握这些特性和技巧可以显著提升我们的建模效率和模型性能。