PyTorch深度学习入门笔记(小土堆)P15-25
PyTorch深度学习入门笔记P15-25ZZHow(ZZHow1024)参考课程【PyTorch深度学习快速入门教程【小土堆】】[https://www.bilibili.com/video/BV1hE411t7RN]P15. 神经网络的基本骨架-nn.Module的使用前向传播input → forward → output案例演示p15_nn_module.pyP16. 土堆说卷积操作概念卷积是一种数学运算广泛应用于信号处理、图像处理和深度学习尤其是卷积神经网络CNN。其核心思想是用一个小的“滑动窗口”卷积核/滤波器在输入数据上滑动计算局部区域的加权和从而提取局部特征。核心组件输入Input形式通常是多维数组如图像是2D矩阵视频是3D张量。卷积核Kernel/Filter作用提取输入的局部特征如边缘、颜色变化。卷积操作Convolution Operation步骤滑动窗口卷积核在输入上按步长stride滑动如步长1时逐像素移动。局部相乘求和卷积核与当前覆盖的输入区域逐元素相乘后求和得到输出的一个值。填充Padding可选在输入边缘填充0控制输出尺寸。输出Feature Map作用卷积操作的结果表示输入数据在特定特征上的响应强度。torch.nn.functional.conv2d作用实现2D 卷积操作的底层函数与nn.Conv2d模块功能相同但更灵活。常用参数input(必需)输入张量格式为4D 张量表示一批图像数据。weight(必需)卷积核权重格式为4D 张量。bias(默认值:None)偏置项格式为1D 张量。stride(默认值:1)控制卷积核滑动的步长步幅。padding(默认值:0)在输入张量的边缘填充0控制输出尺寸。dilation(默认值:1)控制卷积核的空洞率dilated convolution扩大感受野。groups(默认值:1)控制分组卷积的分组数用于减少参数量或实现特定结构如深度可分离卷积。案例演示p16_nn_conv.pyP17. 神经网络-卷积层torch.nn.conv2d作用用于实现2D 卷积的标准模块类它封装了torch.nn.functional.conv2d的功能并自动管理权重和偏置参数。常用参数in_channels(必需)输入数据的通道数。out_channels(必需)卷积核的数量即输出通道数决定了输出特征图的深度。kernel_size(必需)卷积核的大小高度和宽度。stride(默认值:1)控制卷积核滑动的步长步幅。padding(默认值:0)在输入张量的边缘填充0控制输出尺寸。padding_mode(默认值:zeros)指定填充模式仅当padding0时生效。dilation(默认值:1)控制卷积核的空洞率dilated convolution扩大感受野。groups(默认值:1)控制分组卷积的分组数用于减少参数量或实现特定结构如深度可分离卷积。bias(默认值:True)是否在卷积后添加偏置项。案例演示p17_nn_conv2d.pyP18. 神经网络-最大池化的使用torch.nn.MaxPool2d作用对输入特征图进行下采样降维保留局部区域的最大值以提取显著特征并减少计算量。常用参数kernel_size(必需)池化窗口的大小高度和宽度。stride(默认值:None即等于kernel_size)控制池化窗口滑动的步长步幅。padding(默认值:0)在输入特征图的边缘填充0控制输出尺寸。dilation(默认值:1)控制池化窗口的空洞率dilated pooling扩大感受野。return_indices(默认值:False)是否返回最大值在输入特征图中的索引位置。ceil_mode(默认值:False)控制输出尺寸的计算方式。案例演示p18_nn_maxpool.pyP19. 神经网络-非线性激活torch.nn.ReLU作用将所有负值置为0正值保持不变。常用参数inplace(默认值:False)是否进行原地操作in-place operation即直接修改输入张量的值而非创建新的张量。torch.nn.Sigmoid的常用参数作用将输入x映射到(0, 1)区间输出值可解释为概率。案例演示p19_nn_relu.pyP20. 神经网络-线性层及其他层介绍总结对比表层类型核心功能典型应用场景Normalization数据归一化加速训练稳定梯度Recurrent序列建模时序依赖NLP、时间序列预测Transformer自注意力机制机器翻译、视觉TransformerLinear线性变换分类器、特征映射Dropout正则化防过拟合所有深度学习模型Sparse稀疏数据高效处理推荐系统、图神经网络线性层torch.flatten功能将输入张量的指定维度范围从start_dim到end_dim合并为一个维度生成一个新的展平后的张量。常用参数input必须输入的任意维度张量如 1D、2D、3D、4D 等。start_dim默认为 0开始展平的维度索引从该维度起后续维度会被合并。end_dim默认为 -1结束展平的维度索引到该维度止所有中间维度会被合并。负数表示从后往前计数如-1表示最后一个维度。torch.nn.Linear功能对输入张量的最后一个维度执行线性变换。常用参数in_features(必需)输入张量最后一个维度的大小即输入特征的维度。out_features(必需)输出张量最后一个维度的大小即输出特征的维度。bias(默认值:True)是否为线性变换添加偏置项b。案例演示p20_nn_linear.pyP21. 神经网络-搭建小实战和Sequential的使用CIFAR10 模型结构CIFAR10模型结构torch.nn.Sequential的功能将多个神经网络模块如卷积层、全连接层、激活函数等按定义的顺序组合成一个整体模型数据会依次通过每个模块无需手动编写前向传播代码。案例演示p21_nn_seq.pyP22. 损失函数与反向传播torch.nn.L1Loss功能计算预测值与目标值之间绝对差值的平均值或总和。常用参数reductionmean默认指定如何对每个样本的损失进行汇总有三个可选值none、mean、sum。torch.nn.CrossEntropyLoss功能交叉熵损失函数主要用于多分类任务multi-class classification比如图像分类、文本分类等场景。常用参数weight默认值None为每个类别指定一个权重用于处理类别不平衡问题。形状为[num_classes]。ignore_index默认值-100指定一个目标类别索引该类别的损失将被忽略常用于分割任务中的背景类reduction默认值mean’指定如何汇总损失none、mean默认、sum。输入要求输入logits模型的原始输出形状为[batch_size, num_classes]是未经过 softmax 的分数logits。目标target每个样本的真实类别索引是一个整数张量形状为[batch_size]其中的值范围是[0, num_classes - 1]。反向传播result_loss.backward()调用result_loss.backward()自动计算所有可学习参数的梯度即 ∂loss/∂weight, ∂loss/∂bias 等。案例演示**p22_nn_loss.py 和 p22_nn_loss_network.py**P23. 优化器什么是优化器Optimizer作用根据梯度信息智能地调整模型参数让损失函数下降得更快、更稳定。在训练神经网络的过程中我们通过前向传播计算预测值通过损失函数计算预测值与真实值之间的误差通过反向传播计算损失对模型参数的梯度最后优化器根据这些梯度来更新模型的参数使损失逐步减小。torch.optim中常见的优化器优化器类名简介torch.optim.SGD随机梯度下降Stochastic Gradient Descent最基础的优化器torch.optim.Adam自适应矩估计优化器结合了动量和自适应学习率非常流行torch.optim.AdamWAdam 的改进版本解决了权重衰减实现上的问题torch.optim.RMSprop均方根传播优化器适合非平稳目标常用于 RNNtorch.optim.Adagrad自适应学习率优化器适合稀疏数据torch.optim.AdadeltaAdagrad 的改进版不需要手动设置初始学习率torch.optim.LBFGS二阶优化方法适合小批量问题但计算开销较大共同参数参数名类型含义paramsIterable需要优化的模型参数通常传入model.parameters()lr(learning rate)float学习率控制每次参数更新的步长是最重要的超参数之一weight_decayfloat权重衰减L2 正则化用于防止过拟合默认值通常为 0momentumfloat (部分优化器支持)动量因子用于加速 SGD 在相关方向上的收敛减少震荡如 SGD、RMSpropdampeningfloat (部分优化器支持)动量的抑制因子通常与 momentum 配合使用如 SGDnesterovbool (部分优化器支持)是否使用 Nesterov 动量如 SGD可以让动量“预见未来”效果更好epsfloat (部分优化器支持)数值稳定性常数防止除零错误如 Adam、RMSpropamsgradbool (Adam 相关优化器支持)是否使用 AMSGrad 变体对学习率进行更严格的约束Adam/AdamW使用流程# 训练循环forepochinrange(num_epochs):forinputs,targetsindataloader:# 前向传播outputsmodel(inputs)losscriterion(outputs,targets)# 反向传播optimizer.zero_grad()# 清空之前的梯度loss.backward()# 计算新的梯度# 参数更新optimizer.step()# 更新模型参数案例演示p23_nn_optim.pyP24. 现有网络模型的使用及修改torchvision.models核心功能图像分类模型最常用如 ResNet、VGG、AlexNet、EfficientNet、MobileNet 等。目标检测/实例分割模型如 Faster R-CNN、Mask R-CNN、RetinaNet 等。语义分割模型如 FCN、DeepLabV3、U-Net 等。其他视觉任务模型如生成对抗网络GAN、光流估计等。pretrained参数详解pretrainedTrue加载官方提供的预训练权重模型参数初始化为已训练好的值适合直接用于推理或迁移学习。pretrainedFalse默认值模型参数初始化为随机值需从头开始训练适合自定义任务且无预训练需求时。修改现有网络模型# 添加 modulevgg16.classifier.add_module(add_linear,nn.Linear(1000,10))# 修改 modulevgg16.classifier[6]nn.Linear(1000,10)案例演示p24_model_pretrained.pyP25. 网络模型的保存与读取保存方式 1模型结构 模型参数保存torch.save(model,model_name.pth)读取modeltorch.load(model_name.pth,weights_onlyFalse)保存方式 2模型参数保存torch.save(model.state_dict(),model_name.pth)读取model.load_state_dict(torch.load(model_name.pth))案例演示**p25_model_load.py 和 p25_model_save.py**