神经网络项目:全连接网络和卷积网络实现水果三分类项目

水果三分类项目

Git源码:传送门

水果种类:草莓、树莓、桑葚

  • 0:草莓 strawberry
  • 1:树莓 raspberry
  • 2:桑葚 mulberry

草莓、树莓、桑葚

项目设计

  1. 获取数据 spider.py
  2. 数据清洗 cleaner.py
  3. 自定义数据集 dataset.py
  4. 网络构建 net.py
  5. 训练模型 train.py
  6. 推理预测 predict.py
  7. 摄像头 video_process.py、video2Frame.py

获取数据 spider.py

image.pngimage.pngimage.png

数据清洗 cleaner.py

删除不是图片的文件
image.png
删除无法打开的图片
image.png
效果图
image.png
手动删除错误图片
image.pngimage.pngimage.pngimage.png
随机分配数据集
训练:测试 ≈ 8 :1

自定义数据集 dataset.py

尺度缩放
100 * 100
300 * 300

网络构建 net.py

网络层数
激活函数

训练模型 train.py

迭代次数:
100
200

推理预测 predict.py

输入图片,输出水果类别,记录预测结果

摄像头 video_process.py、video2Frame.py

读取视频
摄像头识别

项目实现

FCNN

v1:6层,ReLU,均方差,100*100
网络结构
self.fc = nn.Sequential(nn.Linear(100 * 100 * 3, 784),nn.ReLU(),nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 128),nn.ReLU(),nn.Linear(128, 64),nn.ReLU(),nn.Linear(64, 32),nn.ReLU(),nn.Linear(32, 3),nn.Softmax(dim=1)
)
可视化结果

最优准确率:0.9063
平均准确率:87%左右
准确率图示
image.png
损失图示
image.png

预测结果

总数:90(草莓30+树莓30+桑葚30)
错误:18
分析与解决方案
image.png

v2:6层,ReLU,交叉熵,100*100

对比版本1.0
更新损失函数:均方差–>交叉熵

网络结构
self.fc = nn.Sequential(nn.Linear(100 * 100 * 3, 784),nn.ReLU(),nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 128),nn.ReLU(),nn.Linear(128, 64),nn.ReLU(),nn.Linear(64, 32),nn.ReLU(),nn.Linear(32, 3),
)
可视化结果

最优准确率:0.9109
平均准确率:87%左右
准确率图示
image.png
损失图示
image.png

预测结果

总数:90(草莓30+树莓30+桑葚30)
错误:15
分析与解决方案
image.png

结论

交叉熵效果优于均方差,损失图示显示有过拟合的效果,考虑优化网络层数

v3:4层,ReLU,交叉熵,100*100

对比版本2.0
更改网络层数:6–>4

网络结构
self.fc = nn.Sequential(nn.Linear(100 * 100 * 3, 784),nn.ReLU(),nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 64),nn.ReLU(),nn.Linear(64, 3),
)
可视化结果

最优准确率:0.9
平均准确率:85%
准确率图示
image.png
损失图示
image.png

结论

更改网络层数没有明显的数据变化,考虑增加尺度缩放大小、更换激活函数、增加迭代次数

v4:4层,ReLU,交叉熵,300*300

对比版本3.0
更新尺度缩放:100 * 100->300 * 300
更新迭代次数:200

网络结构
self.fc = nn.Sequential(nn.Linear(300 * 300 * 3, 784),nn.ReLU(),nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 64),nn.ReLU(),nn.Linear(64, 3),
)
可视化结果

最优准确率:0.9
平均准确率:85%
image.png
在这里插入图片描述

结论
v5:4层,PReLU,交叉熵,100*100

对比版本4
更新激活函数:ReLu–>PReLU

网络结构
self.fc = nn.Sequential(nn.Linear(100 * 100 * 3, 784),nn.PReLU(),nn.Linear(784, 256),nn.PReLU(),nn.Linear(256, 64),nn.PReLU(),nn.Linear(64, 3),
)
可视化结果

image.png
image.png

CNN

v1:LeNet5:2cnn+3fc,32*32
网络结构
self.cnn = nn.Sequential(# 32 * 32 * 3 --> 28 * 28 * 6nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5),nn.ReLU(),# 28 * 28 * 6 --> 14 * 14 * 6nn.MaxPool2d(2),# 14 * 14 * 6 --> 10 * 10 * 16nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5),# 10 * 10 * 16 --> 5 * 5 * 16nn.ReLU(),nn.MaxPool2d(2),# 5 * 5 * 16 --> 1 * 1 * 120# nn.Conv2d(in_channels=16, out_channels=120, kernel_size=5),
)
self.fc = nn.Sequential(# 5 * 5 * 16 --> 1 * 1 * 120nn.Linear(400, 120),nn.ReLU(),# 1 * 1 * 120 --> 1 * 1 * 84nn.Linear(120, 84),nn.ReLU(),# 1 * 1 * 84 --> 1 * 1 * 3nn.Linear(84, 3),nn.Softmax(dim=1),
)
可视化结果

在这里插入图片描述

image.png
image.png

v2:LeNet5:3cnn+2fc,32*32
网络结构
self.cnn = nn.Sequential(# 32 * 32 * 3 --> 28 * 28 * 6nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5),nn.ReLU(),# 28 * 28 * 6 --> 14 * 14 * 6nn.MaxPool2d(2),# 14 * 14 * 6 --> 10 * 10 * 16nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5),# 10 * 10 * 16 --> 5 * 5 * 16nn.ReLU(),nn.MaxPool2d(2),# 5 * 5 * 16 --> 1 * 1 * 120nn.Conv2d(in_channels=16, out_channels=120, kernel_size=5),nn.ReLU(),
)
self.fc = nn.Sequential(# 5 * 5 * 16 --> 1 * 1 * 120# nn.Linear(400, 120),# nn.ReLU(),# 1 * 1 * 120 --> 1 * 1 * 84nn.Linear(120, 84),nn.ReLU(),# 1 * 1 * 84 --> 1 * 1 * 3nn.Linear(84, 3),nn.Softmax(dim=1),
)
可视化结果

image.png
在这里插入图片描述

image.png

v3:LeNet5:2cnn+bn+3fc,32*32
网络结构
self.cnn = nn.Sequential(# 32 * 32 * 3 --> 28 * 28 * 6nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5, bias=False),nn.BatchNorm2d(num_features=6),nn.ReLU(),# 28 * 28 * 6 --> 14 * 14 * 6nn.MaxPool2d(2),# 14 * 14 * 6 --> 10 * 10 * 16nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, bias=False),nn.BatchNorm2d(num_features=16),# 10 * 10 * 16 --> 5 * 5 * 16nn.ReLU(),nn.MaxPool2d(2),# 5 * 5 * 16 --> 1 * 1 * 120# nn.Conv2d(in_channels=16, out_channels=120, kernel_size=5),
)
self.fc = nn.Sequential(# 5 * 5 * 16 --> 1 * 1 * 120nn.Linear(400, 120),nn.ReLU(),# 1 * 1 * 120 --> 1 * 1 * 84nn.Linear(120, 84),nn.ReLU(),# 1 * 1 * 84 --> 1 * 1 * 3nn.Linear(84, 3),nn.Softmax(dim=1),
)
可视化结果

image.png
image.png
image.png

结论

cnn_v1可视化效果最稳定

对比

总数90(草莓30+树莓30+桑葚30),统计错误数据

cnn_v2优于cnn_v1

image.png

cnn优于fcnn

image.png

视频展示

总结

问题汇总

爬取数据

问题:获取过多无关数据,例如:草莓熊图片、草莓标准的商品、草莓的广告宣传
解决方案:更换爬取图片的关键字,例如:“草莓”–>“水果草莓”

数据清洗

问题1:无法打开的图片
解决方案:代码实现删除不是图片的文件
问题2:存在无法打开的图片
解决方案:代码实现删除无法打开的图片
问题3:错误信息的图片,例如:水果副产品、错误水果图片
解决方案:手动删除错误信息的图片
问题4:存在重复图片
解决方案:手动删除
问题5:1类中有2类图片
解决方案:手动检查所有图片,调整数据

数据预处理

问题:图片大小不同,获得的图片张量不同
解决方案:尺度缩放,统一大小

推理预测

问题:加载文件报错torch.load with map_location=torch.device(“cpu”) to map your storages to the CPU
原代码:
net.load_state_dict(torch.load(best_weight_path))
改为:
net.load_state_dict(torch.load(best_weight_path, map_location='cpu’))

最优参数

损失函数:交叉熵
网络层数:4层
尺度缩放:100*100
激活函数:ReLU

效果预览

v3:共19张图片,错误2
image.png

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

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

相关文章

git工具简单使用

文章目录 git上传克隆README.gitignore常用指令冲突 git 进行版本控制的版本控制器。安装git yum install -y git 配置git git config --global user.email "youexample.com" 告诉git你的邮箱是什么?最好输入你的gitee的注册邮箱git config --global …

人工智能(pytorch)搭建模型28-基于Transformer的端到端目标检测DETR模型的实际应用,DETR的原理与结构

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型28-基于Transformer的端到端目标检测DETR模型的实际应用,DETR的原理与结构。DETR(Detected Transformers)是一种基于Transformer的端到端目标检测模型&…

把 KubeBlocks 跑在 Kata 上,真的可行吗?

背景 容器的安全性一直是广受关注的话题。这个领域也产生了很多不错的开源项目。Kata就是其中之一。 Kata Containers(简称 Kata)是一种开源项目,它提供了一种安全而高性能的容器运行时环境。Kata Containers 利用虚拟化技术(通常…

【算法刷题 | 贪心算法03】4.25(最大子数组和、买卖股票的最佳时机|| )

文章目录 4.最大子数组和4.1题目4.2解法一:暴力4.2.1暴力思路4.2.2代码实现 4.3解法二:贪心4.3.1贪心思路4.3.2代码实现 5.买卖股票的最佳时机||5.1题目5.2解法:贪心5.2.1贪心思路5.2.2代码实现 4.最大子数组和 4.1题目 给你一个整数数组 n…

Mac下XDebug安装

文章目录 1、下载对应的版本2、编译XDebug3、配置XDebug4、配置PhpStormDebug一下 前置工作 Mac下安装HomebrewMac下brew安装php7.4 1、下载对应的版本 首先按照支持的版本和兼容性来下载对应的版本,此表列出了仍支持哪些 Xdebug 版本,以及哪些版本可用…

GPT的全面历史和演变:从GPT-1到GPT-4

人工智能新篇章:GPT-4与人类互动的未来! 本文探讨了生成式预训练 Transformer (GPT) 的显着演变,提供了从开创性的 GPT-1 到复杂的 GPT-4 的旅程。 每次迭代都标志着重大的技术飞跃,深刻影响人工智能领域以及我们与技术的互动。 我…

linux+ndk把jni制作成so库供apk使用(基础)

环境配置之类的我之前的博客有写,这篇文章我们就直接开始 1.在有ndk配置的服务器创建文件夹,文件夹再创建jni文件夹,jni文件夹里面放置Application.mk,Android.mk与test.c,因为我的ndk运行配置默认是项目下面的jni目录,所以我需要多一个jni目录 2.这里的Application.mk写的是架…

OpenHarmony语言基础类库【@ohos.util (util工具函数)】

ohos.util (util工具函数) 该模块主要提供常用的工具函数,实现字符串编解码([TextEncoder]),[TextDecoder])、有理数运算([RationalNumber8])、缓冲区管理([LRUCache9])、范围判断&…

5款好用的监控员工电脑软件推荐 (如何监控员工上班工作情况)

在现代的商业环境中,管理和监控员工的工作内容是至关重要的。 为了确保员工的工作效率和质量,公司需要使用一些工具来监控他们的工作进程。 以下是五款实用的监控员工工作内容的软件。 域智盾软件 域智盾是一款专为企业打造的智能管理系统。 它借助人…

Vivado-IP-DDS and Testbench Learning

DDS内部结构 实现流程 首先新建一个工程,创建bd文件,添加DDS Compiler核,此处不多赘述 Block Design 在观测输出的信号时,需要将最高位符号位的信号取反,这样才能输出正弦波,否则输出的波形如下图所示 将t…

暴雨亮相CCBN2024 助力广电行业数智化转型

4月23日,第三十届中国国际广播电视信息网络展览会(简称CCBN2024)在北京开展,本次展览会由国家广播电视总局指导、广播电视科学研究院主办,作为国内广电视听领域首个综合性、专业化、引领性、国际化科技产业盛会&#x…

第三节课,后端登录【1】

一、总任务 二、登录接口 get 请求,有缺陷,长度有限制 三、登录逻辑 四、代码书写位置 4.1 编写业务逻辑的位置 五、写代码 5.1 代码1 5.1.1 细节 按 CtrlAltShiftL ,快速格式化 5.1. 2 自动生成接口参数 先/** 再回车 效果图 5.2 按 alt enter …

ffmpeg与sdl的个人笔记

说明 这里的ffmpeg基础知识和sdl基础知识仅提及与示例代码相关的知识点, 进阶可学习雷神的博客。 https://blog.csdn.net/leixiaohua1020 当然,如代码写的有问题或有更好的见解,欢迎指正! 音视频基础知识 在学习音视频理论知识时&#xff…

德思特车载天线方案:打造智能互联的公共安全交通网络

作者介绍 一、方案介绍 随着自动驾驶与智慧汽车概念的逐步推进,人们对汽车的交互性、智能性、互联性有了更高的要求。今天,大多数汽车制造商和供应商普遍将GNSS定位功能与其他信号如广播、电视、蓝牙、Wifi一起集成到汽车中,包括博世、大陆、…

LabVIEW学习记录2 - MySQL数据库连接与操作

LabVIEW学习记录2 - MySQL数据库连接与操作 一、前期准备1.1 windows下安装MySQL的ODBC驱动 二、LabVIEW创建MySQL 的UDL文件三、LabVIEW使用UDL文件进行MySQL数据库操作3.1 建立与数据库的连接:DB Tools Open Connection.vi3.2 断开与数据库的连接:DB T…

【C语言】贪吃蛇详解(附源码)

一、贪吃蛇实现效果 【C语言】贪吃蛇(控制台) 二、源码 🎈🎈🎈Snake 残风也想永存/C语言项目 - 码云 - 开源中国 (gitee.com)🎈🎈🎈 三、如何使用C语言去实现一个贪吃蛇&#xff1f…

【04-提升模型性能:集成学习与超参数优化】

文章目录 前言集成学习BaggingBoosting超参数优化随机搜索贝叶斯优化总结前言 在前几篇博文中,我们已经介绍了一些机器学习的基础知识、Scikit-learn的核心工具与技巧,以及如何评估模型性能。本篇博文将重点讲解两个可以显著提升机器学习模型性能的高级策略:集成学习和超参数…

【机器学习】集成学习---投票法(Voting)

一、引言 集成学习(Ensemble Learning)是机器学习领域中的一种重要策略,它通过结合多个模型的预测结果来提高整体性能。在单个模型容易过拟合或欠拟合的情况下,集成学习能够通过综合多个模型的优点来减少这种风险,从而…

【北京迅为】《iTOP龙芯2K1000开发指南》-第三部分 迅为龙芯开发板快速体验

龙芯2K1000处理器集成2个64位GS264处理器核,主频1GHz,以及各种系统IO接口,集高性能与高配置于一身。支持4G模块、GPS模块、千兆以太网、16GB固态硬盘、双路UART、四路USB、WIFI蓝牙二合一模块、MiniPCIE等接口、双路CAN总线、RS485总线&#…

使用navicate演示在 PostgreSQL 中使用 for 循环语句

1、简单循环示例 do $$ beginfor cnt in 1..10 loopraise notice cnt: %, cnt;end loop; end; $$ navicate中执行 2、循环查询 do $$ declare_record record; beginfor _record in (SELECT version,description FROM flyway_schema_history ORDER BY installed_rank desc li…