Pytorch
pytorch的特点
PyTorch是一个开源的机器学习框架,主要特点包括:
-
动态计算图:PyTorch 使用动态计算图(即 Eager 模式),允许在运行时动态定义和修改计算图,适合快速原型开发和调试,代码更直观灵活
-
易用性:语法简洁,易于上手,适合开发者快速实现模型
-
高效性能:支持GPU加速,利用CUDA进行高效并行计算,适合大规模深度学习任务
-
灵活性:支持动态调整网络结构,适合复杂模型或非标准任务,如NLP和计算机视觉
-
丰富的生态:提供TorchVision、TorchText等工具库,支持数据加载、预处理和模型部署;与ONNX兼容,便于模型导出
-
社区支持:拥有活跃的社区和丰富的教程资源,更新频繁,广泛应用于学术研究和工业部署
-
模块化设计:提供nn.Module等模块化工具,方便构建和管理复杂神经网络
-
自动求导:内置autograd模块,自动计算梯度,简化反向传播实现
pytorch有哪些模块?
torch
torch是PyTorch的核心模块,提供了张量创建、操作以及基本的数学运算等功能,是其他模块的基础
- 张量创建:可以使用torch.tensor()从Python列表创建张量,如x = torch.tensor([1, 2, 3]) ; torch.zeros() 创建全零张量, torch.ones() 创建全一张量等。
- 数学运算:支持各种数学运算,像加法 torch.add() 、乘法 torch.mul() 、矩阵乘法 torch.matmul() 等,并且这些运算可以自动处理广播机制
torch.nn
torch.nn是用于构建神经网络的模块,包含了各种神经网络层、损失函数以及常用的构建模块
神经网络层:
- 线性层: nn.Linear(in_features, out_features) 用于构建全连接层,是神经网络中常用的层,连接输入和输出特征
- 卷积层:如 nn.Conv2d(in_channels, out_channels, kernel_size) 用于二维图像卷积,nn.Conv1d 用于一维数据卷积等
- 循环层:nn.LSTM 、nn.GRU等,用于处理序列数据,如时间序列或自然语言等
损失函数:
- 交叉熵损失:nn.CrossEntropyLoss()常用于分类任务,它结合了nn.LogSoftmax()和nn.NLLLoss()
- 均方误差损失: nn.MSELoss() 常用于回归任务,计算预测值和真实值之间的均方误差
torch.optim
torch.optim 是优化器模块,用于在训练过程中更新神经网络的参数,以最小化损失函数
- 随机梯度下降(SGD)::torch.optim.SGD(params, lr=learning_rate, momentum=momentum_value) ,其中params是需要更新的参数列表,lr是学习率,momentum是动量参数
- Adam优化器: torch.optim.Adam(params, lr=learning_rate, betas=(0.9, 0.999)) ,它结合了动量和自适应学习率调整的方法,在很多任务中表现良好
torch.utils.data
torch.utils.data 模块提供了数据加载和处理的工具,方便在训练和测试时加载数据
- Dataset类:自定义数据集需要继承 torch.utils.data.Dataset 类,并重写 __len__和__getitem__方法,分别返回数据集大小和根据索引获取数据样本
- DataLoader类: torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True) ,可以将 Dataset 对象包装起来,按批次加载数据,还可以设置是否打乱数据等参数
torch.autograd
torch.autograd是自动求导模块,它允许在计算图中自动计算梯度。在构建神经网络时,当定义好前向传播,autograd会自动记录计算过程,并在反向传播时计算梯度,使得模型参数更新变得容易.例如使用loss.backward()就可以自动计算损失函数关于可训练参数的梯度
torchvision
torchvision 是用于计算机视觉任务的扩展模块,提供了常用的数据集、模型架构和图像转换工具
- 数据集:像MNIST、CIFAR - 10、ImageNet等,方便用户直接加载和使用这些经典的计算机视觉数据集
- 模型架构:预训练好的模型,如AlexNet、VGG、ResNet等,可以直接加载使用,也可以在其基础上进行微调以适应特定任务
- 图像转换:包括调整图像大小 torchvision.transforms.Resize 、归一化torchvision.transforms.Normalize 、数据增强(如随机翻转、旋转等)的函数和类