当前位置: 首页 > news >正文

迁移学习—基于猫狗数据集

一、数据预处理

  1. 数据准备:
  1. 创建一个新的目录cats_and_dogs_small,用于存储较小的数据集。
  2. 在cats_and_dogs_small目录下,创建三个子目录:train、validation和test,用于存储训练集、验证集和测试集的图像数据。
  3. 在train、validation和test目录下,分别创建了cats和dogs两个子目录,用于存储猫和狗的图像数据。
  4. 将原始数据集中的猫和狗的图像按照一定的比例分别复制到训练集、验证集和测试集的对应目录中。

具体的分配比例为:

  • 训练集包含1000张猫的图像和1000张狗的图像。
  • 验证集包含500张猫的图像和500张狗的图像。
  • 测试集包含500张猫的图像和500张狗的图像。

二、数据处理

  1. 数据增强与归一化:
  2. 对于数据集图像,预处理步骤如下:

Resize: 将图像调整为指定的大小 (150, 150)。

RandomHorizontalFlip: 随机水平翻转图像,以增加数据集的多样性,帮助模型更好地泛化。

oTensor: 将图像转换为 PyTorch 的张量格式,这样可以在模型中进行处理。

Normalize: 对图像进行标准化,使用指定的均值和标准差(这通常是针对预训练模型的要求)。

  1. 加载数据集

使用 datasets.ImageFolder 加载训练集和验证集数据,这是PyTorch提供的用于加载文件夹结构数据集的工具。可以让每个类别的图像存储在不同的文件夹中。

三、选择网络模型

  1. vgg16模型

对模型的最后一个全连接层进行了修改,以适应二分类任务(猫和狗)。在原始 VGG16 模型中,最后的全连接层输出的是 1000 个类别,因此您将其更改为输出 1 个类别(猫或狗)。

因为所使用的数据集较小,所以选择,冻结卷积层来防止模型过拟合。

  1. 冻结全部卷积层

基础模型: 使用预训练的 VGG16。

冻结层: 所有卷积层被冻结,避免更新。

修改分类器: 将最后的全连接层修改为输出单个神经元,适应二分类任务。

  1. 冻结一层

而让其他所有卷积层和全连接层可训练,选择冻结 VGG16 中的第五层卷积层

  1. Resnet模型

  1. 解冻全部卷积层

解冻所有卷积层意味着在训练过程中,模型的卷积层权重将被更新。这与冻结卷积层形成对比,后者在训练过程中保持权重不变

  1. 解冻一层

解冻一层卷积层可以在保持一定泛化能力的同时,给予模型一定程度的灵活性来适应新数据集

四、模型评估

1、使用vgg16模型

1)冻结全部

损失:训练集的损失从0.1开始,随着训练周期的增加,损失逐渐下降,但下降速度逐渐减慢。验证集的损失从0.2开始,随着训练周期的增加,损失也有所下降,但在某些周期后开始上升 准确率:训练集的准确率从0.70开始,随着训练周期的增加,准确率逐渐上升,接近1.00。验证集的准确率从0.75开始,随着训练周期的增加,准确率也有所上升,但上升速度逐渐减慢,并且在某些周期后开始下降

2)冻结一层

与冻结全部相比,准确率略有所降低。

3、Resnet50模型

  1. 解冻一层

损失分析:损失值的范围从0到0.25,其中训练损失在周期结束时降至约0.05,而验证损失降至约0.10。 准确率分析: 准确率的范围从0.92到1.00,其中训练准确率在周期结束时接近1.00,而验证准确率略低于0.98。 模型在训练过程中损失在减少,准确率在提高,但训练准确率和验证准确率之间的差距表明模型可能存在过拟合的问题。

2)解冻全部

损失分析:损失值的范围从0到2.5,其中训练损失在周期结束时降至约0.15,而验证损失降至约0.20。

准确率分析:准确率的范围从0.92到1.00,其中训练准确率在周期结束时接近1.00,而验证准确率略低于0.99

训练损失和验证损失应该同步下降,训练准确率和验证准确率应该同步上升。这表明模型具有良好的泛化能力。 

http://www.lqws.cn/news/518653.html

相关文章:

  • 【DataWhale组队学习】AI办公实践与应用-数据分析
  • Ubuntu 物理桌面远程访问教程(基于 RealVNC / mstsc)
  • 北斗导航 | 基于CNN-LSTM-PSO算法的接收机自主完好性监测算法
  • Spring Boot 项目文档编写工具推荐
  • 聚焦OpenVINO与OpenCV颜色通道转换的实践指南
  • UniApp 开发第一个项目
  • 防静电地板更换不是建材更新,而是重铸安全防线!
  • nn.Embedding 和 word2vec 的区别
  • 基于LangChat搭建RAG与Function Call结合的聊天机器人方案
  • Catchadmin 使用相关问题
  • Android11 深休后系统定时唤醒导致网络请求服务器过载
  • 数据结构篇-二分图
  • Class00.2线性代数
  • 【评估指标】IoU 交并比
  • Day.42
  • 高等数学》(同济大学·第7版)第七章 微分方程 第五节可降阶的高阶微分方程
  • 【网站内容安全检测】之1:获取网站所有链接sitemap数据
  • Web3D技术协议的AI革命:生成式模型如何改写交互标准?
  • 操作系统之内存管理(王道)
  • LeeCode349. 两个数的交集
  • 基于大模型的甲状腺结节预测及综合诊疗技术方案大纲
  • 防火墙快速管理软件,66K超小巧
  • Java 日志框架选型:SLF4J + Logback vs. Log4j2 的深度解析
  • iClone 中创建的面部动画导入 Daz 3D
  • Spring AOP 中有多个切面时执行顺序是怎样的?
  • Android14音频子系统-Audio HAL分析
  • 南北差异之——跨端理解能力
  • sql格式化自动识别SQL语法结构
  • gsql: command not found
  • OpenLayers 上传Shapefile文件