马铃薯病害识别(VGG-16复现)

news2024/12/26 20:51:11

VGG16-Pytorch实现马铃薯病害识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客
🍖 原作者:K同学啊
电脑系统:Windows11

显卡型号:NVIDIA Quadro P620

语言环境:python 3.9.7

编译器:jupyter notebook

深度学习环境:2.17.0

一、 前期准备
1. 设置GPU


2. 导入数据


3. 划分数据集


二、手动搭建VGG-16模型
1. 搭建模型


2. 查看模型详情


三、 训练模型
1. 编写训练函数


2. 编写测试函数


3. 正式训练


四、 结果可视化
1. Loss与Accuracy图


2. 指定图片进行预测


3. 模型评估

五、总结

一、前期准备

1. 设置 GPU
  • 检查 GPU 可用性:确保你的计算机具有支持 CUDA 的 NVIDIA GPU,并且已正确安装驱动程序。
  • CUDA 和 cuDNN 版本:确认安装了与 PyTorch/TensorFlow 版本兼容的 CUDA 和 cuDNN。
  • 使用 GPU 进行运算:在代码中确保将模型和输入数据移动到 GPU 上,以利用加速计算。
2. 导入数据
  • 数据来源:明确数据集的来源和格式,是否需要进行额外的处理(如下载、解压等)。
  • 数据预处理:考虑进行数据规范化(如缩放到0-1范围)和增强(如随机裁剪、旋转等)以增加模型的泛化能力。
  • 标签格式:确保数据标签的格式正确,能够与模型输出匹配。
3. 划分数据集
  • 训练集、验证集和测试集:明确分配比例,通常使用 70%-80% 数据用于训练,10%-20% 用于验证,剩余的用于测试。
  • 随机性:确保在划分数据集时使用随机种子,以便于复现结果。
  • 数据加载器:使用合适的数据加载器(如 PyTorch 的 DataLoader),确保数据能够按照 batch 进行迭代。

二、手动搭建 VGG-16 模型

1. 搭建模型
  • 层次结构:关注 VGG-16 的固定结构,包括卷积层、激活函数(ReLU)、池化层和全连接层。
  • 参数初始化:考虑适当的权重初始化方法(如 Xavier 或 He 初始化),以帮助模型更快收敛。
  • 输出层:确保输出层的神经元数量与分类任务的类别数量匹配。
2. 查看模型详情
  • 打印模型结构:利用工具函数展示模型层及参数数量,确保搭建的模型符合预期。
  • 配置模型:注意保存模型的配置,方便后续加载和复用。

三、训练模型

1. 编写训练函数
  • 训练循环:确保控制训练轮数与每个 epoch 的 batch 处理。
  • 损失函数:选择合适的损失函数(如交叉熵),确保与任务相符。
  • 优化器:选择适合的优化器(如 Adam 或 SGD),并考虑设置学习率及其衰减策略。
2. 编写测试函数
  • 模型评估:确保在测试集上评估模型性能,记录准确率、损失值等指标。
  • 避免数据泄漏:在测试时,不应使用训练数据,保证模型评估的公正性。
3. 正式训练
  • 监控训练过程:定期检查训练损失和验证损失,提前终止训练以防过拟合。
  • 保存模型:在训练过程中适时保存最佳模型参数,以便后续使用。

四、结果可视化

1. Loss 与 Accuracy 图
  • 可视化工具:选择适当的可视化库(如 Matplotlib)以绘制训练过程中的损失和准确率曲线。
  • 分析趋势:观察训练和验证曲线,识别过拟合、欠拟合等问题。
2. 指定图片进行预测
  • 单张图像处理:确保测试单张图像的预处理步骤与训练一致(如归一化、调整尺寸)。
  • 结果解释:能够直观地展示模型的预测结果和真实标签,方便进行结果的分析。
3. 模型评估
  • 综合评估指标:除了准确率,考虑使用其他评估指标(如混淆矩阵、F1-score、ROC 曲线等)来全面评估模型性能。
  • 灵活性:根据不同的数据集需求,调整评估策略以获得最佳模型表现。

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

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

相关文章

HCSIF: 中国区域2000-2022年高时空分辨率(500m)SIF数据集

日光诱导叶绿素荧光(Solar-induced chlorophyll fluorescence, SIF)被誉为“植被光合作用的探针”。2017年,搭载在Sentinel-5P卫星上的 TROPOMI (TROPOspheric Monitoring Instrument)传感器成功发射,该卫星同时具有高…

STL:相同Size大小的vector和list哪个占用空间多?

在C中,vector和list是两种不同的序列容器。vector底层是连续的内存,而list是非连续的,分散存储的。因此,vector占用的空间更多,因为它需要为存储的元素分配连续的内存空间。 具体占用多少空间,取决于它们分…

蓝牙设备驱动开发

文章目录 一、蓝牙协议架构二、蓝牙协议的HCI传输层三、编程框架 一、蓝牙协议架构 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。它的传输距离为10cm~10m&#…

【计算机网络】实验7:默认路由和特定主机路由以及路由环路问题

实验 7:默认路由和特定主机路由以及路由环路问题 一、 实验目的 了解默认路由以及特定主机路由。 了解静态路由配置错误导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、默认路由以及特定主机路由 (1) 第一步&#xff…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

MiniProfiler WebAPI 分析工具

一、介绍🛠️ MiniProfiler 是一款简单但有效的 .NET、Ruby、Go 和 Node.js 微型 性能分析器 。 MiniProfiler 不会将自身附加到每个方法调用;那会太具有侵入性,并且不会专注于最大的性能问题。相反,它提供: 🔸ADO.…

Java个人博客系统项目文档

项目名称 Java个人博客系统 项目概述 该博客系统是一个多功能的Java应用程序。该系统支持用户发布新文章、浏览他人文章、管理个人文章收藏和删除不再需要的文章。通过该博客系统,用户可以享受一个安全、便捷的在线写作和阅读体验。 运行环境 编程语言&#xff1…

华为HarmonyOS 让应用快速拥有账号能力 - 获取用户头像昵称

场景介绍 如应用需要完善用户头像昵称信息,可使用Account Kit提供的头像昵称授权能力,用户允许应用获取头像昵称后,可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍,若要获取头像还可通过场景化控…

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置

文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…

StarRocks存算分离在得物的降本增效实践

一、背景 OLAP引擎在得物的客服、风控、供应链、投放、运营、ab实验等大量业务场景发挥重要作用,在报表、日志、实时数仓等应用场景都有广泛的应用。 得物引入和使用OLAP引擎的过程中,每个业务都基于自己的需求选择当时最适合自己的引擎。现在得物内部同…

L15.【LeetCode笔记】相同的树

目录 1.题目 代码模板 2.分析 通过合理的if判断分类讨论两个根节点 1.首先,p和q都为NULL的情况最好排除 2.排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULL 写法1 写法2 3.只剩下最后一种情况:p和q都不为NULL 3.代码 提交结果 1.题目 https…

TCP协议(一)

TCP协议(一) 一、TCP协议1、介绍2、主要特点 二、TCP协议段格式1、示意图2、介绍 三、确认应答机制1、基本流程2、作用3、示意图4、序列号示意图 四、超时重传机制1、介绍2、重传超时时间3、往返时间4、平滑往返时间5、系统实现6、数据丢失重传示意图7、…

单链表---链表分割

将小于x的结点放在前面,大于等于x的结点放在后面,不改变结点相对位置,输出更改后的链表首结点。 typedef struct ListNode {ListNode* next;int val; }ListNode; 思路:我们可以新创建两个链表指针,将小于x的结点全部…

Android V reboot重启后电量从0直接跳到100%

问题背景 设备每次重启之后statusBar的电量百分比一开始是0,然后过了2s左右的样子电量才恢复为100% 解决方案 看拿到的串口日志来看,重启之后 healthd 拿到的电量值都是100%,而且这一块的电量也没有变化,重启前后电量都是100%: 自己尝试复现,在Android 15上测试重启,…

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时,将键盘和鼠标的操作在屏幕上显示出来,会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话,可以从Github上下载最…

C 语言学习的经典书籍有哪些?

学习C语言的理由 C语言是一种程席设计语言,它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行,是因为它简单易用。学习C语言的几个理由如下: (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…

leetcode 52. N 皇后 II 困难

n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 示例 1: 输入:n 4 输出:2 解释:如上图所示&#…

谷歌浏览器中搜索引擎的设置与管理

谷歌浏览器作为全球最受欢迎的网络浏览器之一,以其高速、稳定和丰富的功能深受用户喜爱。对于许多用户来说,自定义和管理搜索引擎是提升浏览体验的重要一环。本文将详细介绍如何在谷歌浏览器中设置和管理搜索引擎,包括如何修改默认搜索引擎、…

掌上单片机实验室 — RT - Thread+ROS2 浅尝(26)

前面化解了Micro_ROS通讯问题,并在 RT-Thread Studio 环境下,使用Micro_ROS软件包中的例程,实现了STM32F411CE核心板和ROS2主机的通讯。之后还尝试修改例程 micro_ros_sub_twist.c ,实现了接收 turtle_teleop_key 所发出的 turtle…

什么是Batch Normalization?

一、概念 Batch Normalization是在2015年提出的数据归一化方法,主要用在深度神经网络中激活层之前。它的主要作用是加快模型训练时的收敛速度,使模型训练过程更加稳定,避免梯度爆炸或消失,并起到一定的正则化作用,有时…