PyTorch基础学习系列一
文章目录
- 1. PyTorch安装
- PyTorch张量操作
- 1. 张量创建
- 2. 张量属性与形状操作
- 3. 索引与切片
- 4. 数学运算
- 5. 广播机制
- 6. 自动微分与梯度计算
- 7. 内存共享与复制
- 8. 设备迁移
- 9. 其他高级操作
- 总结
1. PyTorch安装
PyTorch官网,进入官网之后,下滑之后可以看到
点击红框框中的按钮,可以看到所有版本的信息,结合自己的电脑i/服务器配置情况选择合适的版本安装即可
PyTorch张量操作
PyTorch中的张量(Tensor)是其核心数据结构,类似于NumPy的多维数组,但支持GPU加速和自动微分。以下是PyTorch张量操作的详细分类和说明:
1. 张量创建
PyTorch提供多种创建张量的方式:
- 从数据构造:
torch.tensor([[1, 2], [3, 4]]) # 从列表创建 torch.from_numpy(np.array([1, 2])) # 从NumPy数组转换
- 初始化特定值:
torch.zeros(2, 3) # 全0张量 torch.ones(2, 3, dtype=torch.float64) # 全1张量,指定类型 torch.rand(2, 3) # [0,1)均匀分布 torch.randn(2, 3) # 标准正态分布 torch.arange(1, 10, step=2) # 等差数列 [1, 3, 5, 7, 9]
- 特殊矩阵:
torch.eye(3) # 3x3单位矩阵 torch.diag(torch.tensor([1, 2, 3])) # 对角矩阵
注意:torch.Tensor()
与torch.tensor()
的区别:前者默认随机初始化,后者直接使用输入值。
2. 张量属性与形状操作
- 属性查看:
x.shape # 形状(等价于x.size()) x.dtype # 数据类型(如torch.float32) x.device # 存储设备(CPU/GPU)
- 形状调整:
x.view(3, 2) # 调整形状(需元素总数一致) x.reshape(3, 2) # 类似view,但兼容非连续内存 x.unsqueeze(0) # 增加维度(如从[3]变为[1,3]) x.squeeze() # 删除所有大小为1的维度 x.permute(1, 0, 2) # 维度重排(如从[2,3,4]变为[3,2,4])
3. 索引与切片
- 基础操作:
x[0, :2] # 第0行前两列 x[x > 0] # 布尔索引(返回一维张量)
- 高级索引:
torch.masked_select(x, mask) # 按掩码选取 torch.gather(x, dim=1, index=torch.tensor([[0, 1]])) # 按索引采集 torch.index_select(x, dim=0, index=torch.tensor([0, 2])) # 按维度选择
4. 数学运算
- 逐元素运算:
x + y # 加法(等价于torch.add(x, y)) x * y # 乘法(等价于torch.mul(x, y)) torch.sin(x) # 三角函数等
- 矩阵运算:
torch.mm(a, b) # 矩阵乘法(2D) torch.matmul(a, b) # 支持广播的通用乘法 a @ b # 运算符形式 torch.bmm(a, b) # 批量矩阵乘法(3D)
- 归约操作:
x.sum(dim=0) # 沿维度求和 x.mean() # 全局均值 x.max(dim=1, keepdim=True) # 最大值及索引
5. 广播机制
PyTorch自动扩展形状不同的张量以进行运算:
a = torch.tensor([[1], [2]]) # 形状(2,1)
b = torch.tensor([3, 4]) # 形状(2)
a + b # 结果形状(2,2): [[4,5], [5,6]]
6. 自动微分与梯度计算
- 启用梯度追踪:
x = torch.tensor(2.0, requires_grad=True) y = x**2 y.backward() # 计算梯度 print(x.grad) # 输出: 4.0
- 控制梯度流:
with torch.no_grad(): # 禁用梯度计算y = x * 2
7. 内存共享与复制
- 共享内存的操作:
view()
、切片、transpose()
等操作与原张量共享数据。 - 显式复制:
x_copy = x.clone() # 深拷贝
8. 设备迁移
x = x.to('cuda') # 移动到GPU
x = x.cpu() # 移回CPU
9. 其他高级操作
- 复数支持:
torch.complex(real_tensor, imag_tensor)
- 稀疏张量:
torch.sparse_coo_tensor(indices, values, size)
总结
PyTorch的张量操作覆盖了从基础创建到高级数学运算的全流程,支持GPU加速和自动微分,是深度学习模型实现的核心工具。建议结合实践逐步掌握,例如通过官方文档进一步学习。🍉🍉🍉