PyTorch torch
2025-06-25 11:55 更新
一、PyTorch 简介
PyTorch 是一款开源的机器学习框架,它具有以下优势:
- 动态计算图:PyTorch 使用动态计算图,使得用户在调试和构建模型时更加灵活。
- 强大的 GPU 支持:PyTorch 提供了对 NVIDIA GPU 的良好支持,加速计算过程。
- 易于使用的 API:PyTorch 的 API 设计简洁直观,便于上手,适合初学者。
二、张量(Tensor)基础
张量是 PyTorch 中最基本的数据结构,用于表示多维数组。
1. 创建张量
import torch
## 创建一个空张量
empty_tensor = torch.empty(2, 3)
print("空张量:", empty_tensor)
## 创建一个全零张量
zero_tensor = torch.zeros(2, 3)
print("全零张量:", zero_tensor)
## 创建一个全一的张量
ones_tensor = torch.ones(2, 3)
print("全一的张量:", ones_tensor)
## 创建一个从 0 到 4 的一维张量
arange_tensor = torch.arange(5)
print("从 0 到 4 的一维张量:", arange_tensor)
## 创建一个指定范围和步长的一维张量
linspace_tensor = torch.linspace(0, 10, 5)
print("指定范围和步长的一维张量:", linspace_tensor)
## 创建一个二维单位矩阵
eye_tensor = torch.eye(3)
print("二维单位矩阵:", eye_tensor)
## 创建一个指定值填充的张量
full_tensor = torch.full((2, 3), 7)
print("指定值填充的张量:", full_tensor)
运行结果示例:
空张量: tensor([[4.9444e-40, 4.6455e-40, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00]])
全零张量: tensor([[0., 0., 0.],
[0., 0., 0.]])
全一的张量: tensor([[1., 1., 1.],
[1., 1., 1.]])
从 0 到 4 的一维张量: tensor([0, 1, 2, 3, 4])
指定范围和步长的一维张量: tensor([0., 2.5, 5., 7.5, 10.])
二维单位矩阵: tensor([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
指定值填充的张量: tensor([[7., 7., 7.],
[7., 7., 7.]])
2. 张量的基本操作
## 创建两个张量
tensor_a = torch.tensor([[1, 2], [3, 4]])
tensor_b = torch.tensor([[5, 6], [7, 8]])
## 张量相加
add_result = torch.add(tensor_a, tensor_b)
print("张量相加结果:", add_result)
## 张量相减
sub_result = torch.sub(tensor_a, tensor_b)
print("张量相减结果:", sub_result)
## 张量相乘(逐元素相乘)
mul_result = torch.mul(tensor_a, tensor_b)
print("张量相乘结果:", mul_result)
## 张量矩阵乘法
matmul_result = torch.matmul(tensor_a, tensor_b)
print("张量矩阵乘法结果:", matmul_result)
运行结果示例:
张量相加结果: tensor([[6, 8],
[10, 12]])
张量相减结果: tensor([[-4, -4],
[-4, -4]])
张量相乘结果: tensor([[5, 12],
[21, 32]])
张量矩阵乘法结果: tensor([[19, 22],
[43, 50]])
三、张量的索引、切片与拼接
1. 索引与切片
## 索引操作
print("第一个元素:", tensor_a[0, 0])
print("第二行:", tensor_a[1])
## 切片操作
print("前两行:", tensor_a[:2])
print("第一列:", tensor_a[:, 0])
运行结果示例:
第一个元素: tensor(1)
第二行: tensor([3, 4])
前两行: tensor([[1, 2],
[3, 4]])
第一列: tensor([1, 3])
2. 拼接张量
## 水平拼接
cat_result = torch.cat((tensor_a, tensor_b), dim=1)
print("水平拼接结果:", cat_result)
## 垂直拼接
stack_result = torch.stack((tensor_a, tensor_b), dim=0)
print("垂直拼接结果:", stack_result)
运行结果示例:
水平拼接结果: tensor([[1, 2, 5, 6],
[3, 4, 7, 8]])
垂直拼接结果: tensor([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
四、随机抽样
## 生成均匀分布的随机数
rand_tensor = torch.rand(2, 3)
print("均匀分布随机数:", rand_tensor)
## 生成标准正态分布的随机数
randn_tensor = torch.randn(2, 3)
print("标准正态分布随机数:", randn_tensor)
## 生成指定范围的随机整数
randint_tensor = torch.randint(0, 10, (2, 3))
print("指定范围随机整数:", randint_tensor)
运行结果示例:
均匀分布随机数: tensor([[0.1234, 0.5678, 0.9012],
[0.3456, 0.7890, 0.2345]])
标准正态分布随机数: tensor([[0.1234, -0.5678, 0.9012],
[-0.3456, 0.7890, -0.2345]])
指定范围随机整数: tensor([[2, 5, 7],
[3, 8, 1]])
五、数学运算
1. 逐点操作
## 计算绝对值
abs_result = torch.abs(torch.tensor([-1, -2, 3]))
print("绝对值结果:", abs_result)
## 计算三角函数
sin_result = torch.sin(torch.tensor([0, 3.1416, 6.2832]))
print("正弦函数结果:", sin_result)
cos_result = torch.cos(torch.tensor([0, 3.1416, 6.2832]))
print("余弦函数结果:", cos_result)
运行结果示例:
绝对值结果: tensor([1, 2, 3])
正弦函数结果: tensor([0.0000, 0.0000, -0.0000])
余弦函数结果: tensor([1.0000, -1.0000, 1.0000])
2. 矩阵操作
## 矩阵转置
transpose_result = torch.transpose(tensor_a, 0, 1)
print("矩阵转置结果:", transpose_result)
## 矩阵求逆(需要矩阵可逆)
## tensor_a = torch.tensor([[4, 7], [2, 6]], dtype=torch.float32)
## inverse_result = torch.inverse(tensor_a)
## print("矩阵求逆结果:", inverse_result)
运行结果示例:
矩阵转置结果: tensor([[1, 3],
[2, 4]])
六、代码实操环节
实操 1:创建张量并进行简单运算
## 创建两个张量
tensor_x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
tensor_y = torch.tensor([[5.0, 6.0], [7.0, 8.0]])
## 进行加减乘除运算
add_xy = torch.add(tensor_x, tensor_y)
sub_xy = torch.sub(tensor_x, tensor_y)
mul_xy = torch.mul(tensor_x, tensor_y)
div_xy = torch.div(tensor_x, tensor_y)
print("张量相加:", add_xy)
print("张量相减:", sub_xy)
print("张量相乘:", mul_xy)
print("张量相除:", div_xy)
运行结果示例:
张量相加: tensor([[6., 8.],
[10., 12.]])
张量相减: tensor([[-4., -4.],
[-4., -4.]])
张量相乘: tensor([[5., 12.],
[21., 32.]])
张量相除: tensor([[0.2000, 0.3333],
[0.4286, 0.5000]])
实操 2:随机抽样并计算均值和标准差
## 生成随机张量
random_tensor = torch.randn(100, 100)
## 计算均值和标准差
mean_value = torch.mean(random_tensor)
std_value = torch.std(random_tensor)
print("随机张量均值:", mean_value)
print("随机张量标准差:", std_value)
运行结果示例:
随机张量均值: tensor(0.0054)
随机张量标准差: tensor(0.9972)
七、总结与展望
本教程从零基础出发,带领大家认识了 PyTorch 环境,了解了张量的基本操作、索引与切片、拼接、随机抽样以及数学运算等内容。希望大家可以通过代码实操环节加强对所学知识的理解。后续可以继续探索更多 PyTorch 相关知识,如自动梯度、神经网络构建与训练等。
以上内容是否对您有帮助:
更多建议: