pytorch工具箱(二)
1. 神经网络核心概念
讨论了神经网络的三大核心组件:层、模型、损失函数和优化器。
重点解读了正向传播和反向传播的过程,以及两者在神经网络训练中的协同作用。
2. NN.Model与NN.Functional的区别
NN.Model:可以自动提取和学习可调节参数(如卷积层、全连接层的权重和偏置),便捷地搭建复杂的网络结构。
NN.Functional:更像是一种“纯函数”式的编程方式,更适合搭建没有可学习参数的简单层(如激活函数、层归一化等)。
3. 模型构建与超参数设置
介绍了基于MNIST手写数字识别任务,如何使用NN.Model创建一个多层感知机(MLP)网络模型。
展示了通过name前缀(如layer_)为不同模块命名,使得模型可见性更强。
讨论了关键超参数,包括:
全连接层神经元数量:建议输入层的神经元个数足够多,近似样本总数(784),而隐藏层的神经元数量应逐级递减,以便网络能更好地捕捉和逐步聚合特征。
输出层维度:对于分类任务,输出层的神经元数量必须等于类别数目。
激活函数:在MLP模型中,ReLU函数因其简单有效而被广泛使用。
4. 参数共享机制
提出了一种更先进的方案:通过NN.Functional,将模型定义为一个关注目标的序列,允许更灵活地控制每个层的行为,例如可以利用共享参数机制来优化一次性参数组的复用。
5. 继承概念
通过现实生活中的“继承财产”类比,解释了编程中“继承”的含义:子类在获得父类已打好框架(代码)的基础上,可以结合自身想法进行修改和扩展。
简单提及导入库如numpy、pandas等,本质上也是将他人封装好的代码“继承”使用。
6. 模型容器的使用与作用
model (nn.Module): 将多个层(如全连接层、卷积层)封装在同一个容器内,便于管理和调用,其最显著作用是实现代码的复用,尤其是在设计残差块这类通用组件时非常高效。
model_list: 采用列表形式将多个模块依次串联,也可以实现代码复用。
model_dict: 类似于字典,通过键名访问不同的模型模块,为网络结构设计提供了灵活性。
7. 激活函数与网络构建
强调了激活函数(特别是ReLU)对于缓解神经网络“梯度消失”、解决线性不可分问题的重要性,是构成深层感知机的关键。
展示了如何利用模型容器进行构建,如通过for循环连接各层,简化了网络定义的代码。
8. 残差块 (Residual Block) 设计
讲解了残差块的基本结构:输入与经过多层变换后的输出相加,再应用激活函数,旨在保持信息流,防止随着网络加深而降低性能。
分享了两种具体实现方式:
类型一: 经过多层卷积和归一化后,直接与原始输入相加。
类型二: 当输入和输出的维度不匹配时,先用一个1x1的卷积层调整通道数和分辨率,使其与输出对齐,再进行相加。这两种设计是构建ResNet等著名网络的基础。
9. 网络整体工作流程
回顾了从数据预处理、定义模型、选择损失函数和优化方法,到循环训练与验证的完整流程,阐明了模型训练的核心步骤
10.总结
详细介绍了神经网络的核心概念,包括层、模型、损失函数和优化器,并重点解读了正向传播和反向传播的过程。同时,探讨了NN.Model与NN.Functional的区别,以及模型构建与超参数设置的方法。此外,还介绍了参数共享机制、继承概念、模型容器的使用与作用、激活函数的重要性、残差块的设计以及网络整体工作流程。