深度学习------专题《使用模型和集成方法》
目录
深度学习入门:从模型构建到集成方法的预备知识总结:
最近在学习深度学习,接触了不少 “预备知识”—— 从环境配置、模型搭建,到数据处理和集成技巧,每一步都藏着学问。今天把这些内容梳理一下,既是给自己复盘,也希望能帮到刚入门的同学~
一、先把 “工具” 准备好:模块导入的逻辑
要做深度学习,得先把常用的 “工具库” 导入进来。我刚开始学的时候,看着一堆import有点懵,后来慢慢明白每个库的分工:
- PyTorch 核心:
torch是整个框架的基础,torch.nn(建模用的层、模块)、torch.optim(优化器,比如 Adam)、torch.nn.functional(激活函数、池化等操作)是搭建模型的 “砖瓦”;torch.backends.cudnn能加速 GPU 计算。 - 数值与视觉辅助:
numpy用来做数值计算(有时候和 PyTorch 张量互相转换);torchvision专门处理图像数据,比如数据集下载、图像变换(transforms)。 - 数据与工具类:
DataLoader把数据集分成小批次,方便训练时迭代;Counter是 Python 自带的工具,后面做 “投票集成” 会用到。
另外还要定义超参数,比如BATCHSIZE(每次喂给模型多少样本)、EPOCHES(训练多少轮)、LR(学习率,控制参数更新的步长),这些参数得根据任务调整。
二、模型是怎么 “搭” 出来的?像搭积木一样组合层
深度学习模型,尤其是 CNN(卷积神经网络),感觉就像 “搭积木”—— 把卷积层、池化层、全连接层按一定顺序组合起来。以 PyTorch 为例,所有模型都要继承nn.Module,然后在__init__里定义层,在forward里写数据的流动逻辑。
1. 简单 CNN 的 “积木式” 搭建
比如CNNNet、Net这些模型,都是先做卷积(提取特征),再用池化(缩小特征图尺寸,保留关键信息),最后用全连接层做分类。我刚开始写的时候,总搞不清Conv2d的参数(输入通道、输出通道、卷积核大小),后来记住了规律:输入通道要和上一层的输出通道匹配,输出通道可以自己设计(相当于提取的特征数量)。
2. 经典与复杂模型的对比
- LeNet:很经典的早期 CNN 结构,卷积 + 池化的组合很清晰,能帮新手理解 “特征从简单到复杂” 的提取过程。
- VGG:更复杂一些,用了 “重复小卷积块 + 池化” 的模式。代码里还用了
cfg(配置列表)来生成层,这种 “配置化构建” 的思路很实用,能减少重复代码,也方便对比不同深度的 VGG(比如 VGG16 和 VGG19)。
三、数据是模型的 “燃料”:加载与预处理
模型搭好了,得喂数据。以 CIFAR10 数据集为例(它是 10 类物体的图像数据集),数据处理分两步:变换(transform)和加载(DataLoader)。
- 变换(transforms):训练集和测试集的处理不太一样。训练集要做数据增强(比如
RandomCrop随机裁剪、RandomHorizontalFlip随机水平翻转),目的是让模型见更多 “变种”,提高泛化能力;测试集只需要标准化(Normalize)和转张量(ToTensor)就行,因为测试要 “原汁原味” 地评估。 - 加载(DataLoader):把数据集打包成 “批次”,训练时用
shuffle=True打乱数据,让模型每次看到的样本顺序不同;测试时shuffle=False,方便评估。
第一次下载数据集时,要把download=True(代码里原来可能是 False,会报错 “数据集找不到”),这样 PyTorch 会自动把 CIFAR10 下载到指定目录。
四、集成方法:让多个模型 “投票” 提高准确率
单个模型容易 “偏见”,那让多个模型一起预测,最后 “投票” 选结果,准确率往往更高 —— 这就是模型集成的思路。
代码里把多个模型(比如CNNNet、Net、LeNet)放到一个列表里,然后:
- 一起训练:每个模型都在同样的数据集上学,优化器同时更新所有模型的参数。
- 一起预测:测试时,每个模型都输出预测结果,然后用
Counter统计每个样本的 “投票”,选得票最多的类别作为最终预测。
我试了下,集成后的模型准确率确实比单个模型更稳定,有点像 “三个臭皮匠顶个诸葛亮” 的感觉~
五、最后:这些预备知识是深度学习的 “地基”
从模块导入、模型搭建,到数据处理、集成方法,这些都是深度学习实践的基础。刚开始学的时候,每一步都得仔细琢磨(比如模型里forward的张量形状怎么变化、数据增强为什么有用),但掌握后会发现,它们都是在为 “让模型更好地学习” 服务。把这些 “预备知识” 吃透,后面做更复杂的任务(比如更大的数据集、更深度的模型)也会更有底气~
更多推荐
所有评论(0)