实用指南:第三十三天打卡复习

news/2025/10/6 16:56:52/文章来源:https://www.cnblogs.com/lxjshuju/p/19127740

torch 库

 1. 张量操作
torch 库提供了张量(Tensor)数据结构,类似于 NumPy 的多维数组,但张量可以在 GPU 上运行以加速计算。

 2. 自动求导
torch.autograd 模块实现了自动求导功能,这对于训练神经网络至关重要。通过设置 requires_grad=True ,PyTorch 会跟踪所有涉及该张量的操作,并在调用 backward() 方法时自动计算梯度。

 3. 神经网络模块
torch.nn 模块提供了构建神经网络所需的各种组件,如层、损失函数等。可以通过继承 torch.nn.Module 类来定义自定义的神经网络。

4. 优化器
torch.optim 模块提供了各种优化算法,如随机梯度下降(SGD)、Adam 等,用于更新神经网络的参数。

 5. GPU 加速
torch.cuda 模块允许将张量和模型移动到 GPU 上进行计算,从而加速训练过程。可以使用 torch.cuda.is_available() 检查 GPU 是否可用。

全连接神经网络(Fully Connected Neural Network)

也被称为多层感知机(Multilayer Perceptron, MLP),是一种基本的神经网络结构。

1. 输入层(Input Layer)

输入层是神经网络的第一层,负责接收原始数据。输入层的神经元数量通常取决于输入数据的特征数量。例如,若输入数据是一个包含 784 个像素值的手写数字图像(28x28 像素),那么输入层就会有 784 个神经元,每个神经元对应一个像素值。输入层并不对数据进行任何计算,只是简单地将数据传递给下一层。

 2. 隐藏层(Hidden Layer)


隐藏层位于输入层和输出层之间,可以有一层或多层。隐藏层的神经元通过权重和偏置对输入数据进行非线性变换,从而学习数据中的复杂模式和特征。每一层的神经元都与上一层的所有神经元相连接,这就是“全连接”的含义。隐藏层的神经元数量和层数是超参数,需要根据具体问题进行调整。更多的隐藏层和神经元通常能学习到更复杂的模式,但也可能导致过拟合。

 3. 输出层(Output Layer)


输出层是神经网络的最后一层,负责输出最终的预测结果。输出层的神经元数量取决于具体的任务。例如,在二分类问题中,输出层通常只有一个神经元,输出一个介于 0 和 1 之间的概率值;在多分类问题中,输出层的神经元数量等于类别数,每个神经元输出对应类别的概率。

 4. 前向传播顺序

前向传播(Forward Propagation)是神经网络的核心计算过程,指输入数据从输入层逐层传递到输出层的过程。以下是详细步骤和计算顺序(以全连接网络为例):


1. 输入层 → 第一个隐藏层
  • 输入数据X(形状:[batch_size, input_dim]

  • 权重矩阵(形状:[input_dim, hidden_units]

  • 偏置向量(形状:[hidden_units]

  • 计算过程

    Z¹ = X · W¹ + b¹  # 线性变换
    A¹ = σ(Z¹)        # 激活函数(如ReLU/Sigmoid)
    • :加权和(未激活值)

    • :激活后的输出(作为下一层输入)


2. 隐藏层 → 隐藏层(多层时)
  • 第 k 层计算(k ≥ 2):

    Zᵏ = Aᵏ⁻¹ · Wᵏ + bᵏ  # 前一层输出作为输入
    Aᵏ = σ(Zᵏ)
  • 关键点

    • 每层的输入是前一层的激活输出 Aᵏ⁻¹

    • 权重矩阵 Wᵏ 形状为 [prev_units, current_units]


3. 最后一个隐藏层 → 输出层
  • 输入Aᴸ⁻¹(最后隐藏层输出)

  • 输出层权重Wᴸ(形状:[last_hidden_units, output_dim]

  • 计算

    Zᴸ = Aᴸ⁻¹ · Wᴸ + bᴸ
    Ŷ = g(Zᴸ)  # 输出层激活函数
    • 分类任务g 通常用 Softmax(多分类)或 Sigmoid(二分类)

    • 回归任务g 可以是恒等函数(无激活)

5.神经网络

在训练过程中监控模型在测试集(或验证集)上的性能。这样做有两个关键目的:

  1. 检测过拟合:当训练损失下降但测试损失上升时,表明模型开始记忆训练数据而非学习泛化模式

  2. 确定最佳停止点:通过测试集表现选择最佳模型,避免欠拟合或过拟合

6.参数

1.num_epochs

num_epochs = 20000  # 训练的轮数
  • 作用:定义模型将完整遍历整个训练数据集的次数

  • 典型值

    • 简单任务:100-500

    • 中等任务:500-2000

    • 复杂任务:2000-10000(本例20000偏大,可能是复杂任务或调试目的)

  • 注意事项

    • 过小:模型欠拟合

    • 过大:可能导致过拟合且浪费计算资源

    • 通常配合早停机制使用

2. model.forward(X_train) 与 model(X_train)

outputs = model.forward(X_train)   # 显式调用
# outputs = model(X_train)         # 隐式调用
  • 作用:执行前向传播计算

  • 关键区别

    • forward():直接调用前向传播方法

    • model():通过PyTorch的__call__魔术方法隐式调用forward()推荐使用

  • 参数

    • X_train:训练数据张量,形状通常为[batch_size, features]

3. criterion  损失函数

loss = criterion(outputs, y_train)
  • 作用:计算模型预测值与真实标签之间的差异(损失函数)

  • 常见选择

    • 分类任务:nn.CrossEntropyLoss()(多分类),nn.BCELoss()(二分类)

    • 回归任务:nn.MSELoss()(均方误差)

    • 自定义损失:可继承nn.Module实现

  • 参数

    • outputs:模型预测值

    • y_train:真实标签

4. optimizer

optimizer.zero_grad()  # 梯度清零
loss.backward()        # 反向传播
optimizer.step()       # 参数更新
  • 优化器三件套

    • zero_grad():清零梯度缓存(防止梯度累积)

    • backward():自动计算梯度(反向传播)

    • step():根据梯度更新权重参数

  • 常见优化器类型

    # 创建示例optimizer = torch.optim.SGD(model.parameters(), lr=0.01)optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

    关键参数

  • 优化器学习率(lr)动量(momentum)适用场景
    SGD0.01-0.10.9-0.99基础优化
    Adam0.0001-0.001β1=0.9, β2=0.999默认首选
    RMSprop0.001-RNN/LSTM

5. loss.item()

losses.append(loss.item())
  • 作用:loss 一般是一个包含单个元素的张量(Tensor), item() 是张量对象的一个方法,其作用是将仅含一个元素的张量转换为 Python 的标量(如 float 类型)。因此, loss.item() 就是把存储损失值的张量转换为 Python 标量值,方便后续打印、记录或者进一步处理。

  • 必要性

    • PyTorch张量包含梯度信息,.item()剥离计算图

    • 减少内存占用(避免保存完整计算图)

    • 便于Python数值操作(绘图、打印等)

6. 日志打印控制

if (epoch + 1) % 100 == 0:    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
  • 关键参数

    • 100:日志打印间隔(平衡信息量与输出量)

    • :.4f:格式化损失值显示4位小数

  • 设计考量

    • 大模型/大数据集:增大间隔(如500-1000)

    • 调试阶段:减小间隔(如10-50)

7. 隐藏的重要参数

学习率 (Learning Rate)
  • 作用:控制参数更新步长的超参数

  • 影响

    • 过大:震荡/发散

    • 过小:收敛缓慢

  • 设置方法

    optimizer = torch.optim.Adam(model.parameters(), lr=0.001)  # 关键参数
批量大小 (Batch Size)
  • 作用:每次迭代使用的样本数

  • 影响

    • 大batch:训练稳定,内存要求高

    • 小batch:噪声大,正则化效果强

  • 典型位置

    # 在DataLoader中设置train_loader = DataLoader(dataset, batch_size=64)

    @浙大疏锦行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:Hardening fixes lead to hard questions

实用指南:Hardening fixes lead to hard questionspre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

赛前训练6 状压

A 简单树上差分. B 维护 \(d_{i,j}\) 表示人 \(i\) 在第 \(j\) 位与哪些人有区别.预处理即可. 对于每个人,枚举提问的二进制状态;对于提问的每个二进制位,将它们的 \(d\) 全部拼起来,若能拼成 ((1<<n)-1)^(1<…

排序综合

1、基础排序(cmp函数自定义排序) `struct Ren { int a;int b; }ren[1000010]; bool cmp(const Ren& i, const Ren& j) { if (i.zhi < j.zhi) { return true; } else { if (i.zhi == j.zhi) { if (i.ji &g…

Java从入门到精通 - 常用API(一) - 详解

Java从入门到精通 - 常用API(一) - 详解2025-10-06 16:50 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…

NKOJ全TJ计划——NP11745

题目内容 最小割板子 小 E 有一棵有\(n\) 个点的无根树,它的节点编号为\(1\) 到\(n\) ,其中第\(i(i\in [1,n-1])\) 条边连接节点\(u_i\)和\(v_i\) 。同时他还有\(m\)条树上的路径,第\(i\)条路径为从节点\(a_i\)到\(…

InfinityFree教程 ——免费搭建属于你的网站

本文讲述了如何通过 "InfinityFree" 搭建免费的纯前端网站💖** InfinityFree 简介** InfinityFree是一个提供免费虚拟主机服务的平台,提供免费虚拟主机。每个账户可创建3个站点,支持自定义域名(需使用其…

深入解析:npm、yarn幽灵依赖问题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

营销网站的案例分析wordpress用图床好还是

在快节奏的现代生活中&#xff0c;个人债务问题似乎已成为许多人不得不面对的挑战。正确处理个人债务&#xff0c;不仅关系到个人信用和财务状况&#xff0c;更是实现财务自由的重要一步。本文将为您提供一些实用的建议&#xff0c;帮助您优雅地解决个人债务问题&#xff0c;走…

10.6 模考 T4(QOJ 1836)

题意:给定 \(n\) 个点 \(m\) 条边的无向图,定义“花”为一个拥有 \(4\) 个结点的导出子图,这个导出子图有 \(1\) 条边或 \(5\) 条边。定义“叶”为一个拥有 \(4\) 个结点的导出子图,这个导出子图有 \(3\) 条边,且…

iTunes 无法备份 iPhone:10 种解决方法 - 详解

iTunes 无法备份 iPhone:10 种解决方法 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

实用指南:【Node.js 深度解析】npm install 遭遇:npm ERR! code CERT_HAS_EXPIRED 错误的终极解决方案

实用指南:【Node.js 深度解析】npm install 遭遇:npm ERR! code CERT_HAS_EXPIRED 错误的终极解决方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

关于调和级数估算前n项的和

我们要估算 \(\displaystyle\sum^n_{i = 1}\dfrac{1}{i}\)。 我们知道 \(\displaystyle\sum^n_{i = 1}\dfrac{1}{i}\approx \int_1^n\dfrac{1}{i} = (\ln\left|i\right|)\bigg |^n_1 = \ln n - \ln 1 = \ln n\)。 因此…

专业的网站优化黑马前端学费多少

CCIE理论-第五篇-SDA-2 DNA Center 展示一下web的界面哈 其实就类似平时弄的web的防火墙呀,其他设备等 弹性子网 这一章来讲讲弹性子网 stretched subnets allow an ip subnet to be :stretched:vla the overlay 拉伸子网允许通过覆盖“拉伸”IP子网1基于主机IP的流量…

Windows install RabbitMQ via PowerShell via administrator role

//Run PowerShell as Administrator role //Run below commands respectively //First command Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.N…

Windows漏洞利用技巧:虚拟内存访问陷阱(2025更新)

本文详细介绍了在Windows系统中构建虚拟内存访问陷阱的技术方法,重点分析了Windows 11 24H2新特性如何让攻击者能够利用本地SMB服务器进行内存访问延迟攻击,为利用TOCTOU类型内核漏洞提供了新的攻击向量。Windows漏洞…

北京单页营销型网站tp3企业网站开发百度云

1 概述 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只适用于单线程环境,多线程环境可以采用并发包下的concurrentHashMap HashMap 实现了Serializable接口&#x…

深圳福田站网站用户体验模型

Flutter开发过程中&#xff0c;对于视频播放的三方组件有很多&#xff0c;在Android端适配都挺好&#xff0c;但是在适配iPhone手机的时候&#xff0c;如果设置了UIInterfaceOrientationLandscapeLeft和UIInterfaceOrientationLandscapeRight都为false的情况下&#xff0c;无法…

Python编译期优化:隐藏在代码背后的效率魔法

Python编译期优化:隐藏在代码背后的效率魔法 Python常被认为是解释型语言,但实际上它采用了"编译→解释"的混合执行模式。在将源代码转换为字节码的编译阶段,Python解释器会进行一系列优化,显著提升程序…

网站文件夹名百度推广关键词怎么设置好

参考&#xff1a;基于知识库和 LLM 的问答系统经验分享 - 知乎 (zhihu.com) 一、基于LLM的问答系统架构 比较常见的开源 LLM 的问答系统都会遵循下图这种结构去进行设计&#xff1a; 加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本…

无需安装的Photoshop:网页版完整使用指南与在线图片编辑技巧

​ 你还在为安装庞大的Photoshop软件而烦恼吗?面对几百兆的安装包、繁琐的配置流程,确实让人头疼。特别是当你只是偶尔需要修个图、换个证件照背景,或是简单处理头像时,真的不必大费周章安装一个“重量级”应用。今…