基于卷积神经网络CNN的水果分类预测,卷积神经网络水果等级识别

news2024/11/27 19:53:22

目录
背影
卷积神经网络CNN的原理
卷积神经网络CNN的定义
卷积神经网络CNN的神经元
卷积神经网络CNN的激活函数
卷积神经网络CNN的传递函数
卷积神经网络CNN水果分类预测
基本结构
主要参数
MATALB代码
结果图
展望

背影

现在生活,为节能减排,减少电能损耗,高压智能输电网是电网发展的趋势,本文基于卷积神经网络输电线路三相故障识别。

卷积神经网络CNN的原理

卷积神经网络CNN的定义

在这里插入图片描述

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)”

卷积神经网络CNN的基本结构

基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

输入层

卷积神经网络的输入层可以处理多维数据,常见地,一维卷积神经网络的输入层接收一维或二维数组,其中一维数组通常为时间或频谱采样;二维数组可能包含多个通道;二维卷积神经网络的输入层接收二维或三维数组;三维卷积神经网络的输入层接收四维数组 。由于卷积神经网络在计算机视觉领域应用较广,因此许多研究在介绍其结构时预先假设了三维输入数据,即平面上的二维像素点和RGB通道。
与其它神经网络算法类似,由于使用梯度下降算法进行学习,卷积神经网络的输入特征需要进行标准化处理。具体地,在将学习数据输入卷积神经网络前,需在通道或时间/频率维对输入数据进行归一化,若输入数据为像素,也可将分布于 的原始像素值归一化至 区间 。输入特征的标准化有利于提升卷积神经网络的学习效率和表现。

隐含层

卷积神经网络的隐含层包含卷积层、池化层和全连接层3类常见构筑,在一些更为现代的算法中可能有Inception模块、残差块(residual block)等复杂构筑。在常见构筑中,卷积层和池化层为卷积神经网络特有。卷积层中的卷积核包含权重系数,而池化层不包含权重系数,因此在文献中,池化层可能不被认为是独立的层。以LeNet-5为例,3类常见构筑在隐含层中的顺序通常为:输入-卷积层-池化层-全连接层-输出。

卷积层

卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量(bias vector),类似于一个前馈神经网络的神经元(neuron)。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,区域的大小取决于卷积核的大小,在文献中被称为“感受野(receptive field)”,其含义可类比视觉皮层细胞的感受野 。卷积核在工作时,会有规律地扫过输入特征,在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量

池化层(pooling layer)
在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同,由池化大小、步长和填充控制

全连接层(fully-connected layer)
卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层。全连接层位于卷积神经网络隐含层的最后部分,并只向其它全连接层传递信号。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数

输出层
卷积神经网络中输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同。对于图像分类问题,输出层使用逻辑函数或归一化指数函数(softmax function)输出分类标签 。在物体识别(object detection)问题中,输出层可设计为输出物体的中心坐标、大小和分类 。在图像语义分割中,输出层直接输出每个像素的分类结果

基于卷积神经网络CNN的水果分类识别

基本模型

创建经典的Lenet,三层神经网络,

神经网络参数

卷积核33,池化层22,学习率0.5,训练批次10,最大迭代次数100

数据

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

MATLAB编程代码

clear
clc
close all

%%
clc;clear;close all; format compact
%% 加载数据
load tz_datasets
data=tz_image;
%%
input1=double(data);%转为double类型文件
output1=[ones(1,16) 2ones(1,16) ];%16个好橘子,作为标签1,剩下的怀橘子对应标签2
%%
[PCALoadings,PCAScores,PCAVar] = pca(input1);%利用PCA进行降维
input=PCAScores(:,1:16);%利用pca进行降维至16维,用于构建一个4
4的矩阵输入(CNN的输入是图片)
%%
%把输出从1维变成2维 好橘子为第1类,对应标签[1 0];坏橘子为第二类,对应标签[0 1]
for i=1:size(output1,2)
output(output1(i),i)=1;
end
%%
for i=1:size(input,1)
x=reshape(input(i,:),4,4);
input_x(:,:,i)=x;
end
%%
[m n]=sort(rand(1,32));
train_x=input_x(:,:,n(1:16));
train_y=output(:,n(1:16));
test_x=input_x(:,:,n(17:end));
test_y=output(:,n(17:end));

%% 创建一个经典Lenet(卷积神经网络中代表模型,如lenet、alexnet,vgg16,resnet等)
rand(‘state’,0)
cnn.layers = {
%第一层
struct(‘type’, ‘i’) %输入层
%第二层
struct(‘type’, ‘c’, ‘outputmaps’, 10, ‘kernelsize’, 3) %卷积层–相当于隐含层节点为10,每次采用一个33的卷积核进行抽样卷积
% 卷积后的图像大小为(4-3+1)
(4-3+1)=22
struct(‘type’, ‘s’, ‘scale’, 2) %池化层 利用一个2
2的池化层把卷积后的图像降维原来的一半
% (2/2)(2/2)=11
};
%% 训练 CNN
% 参数设置
opts.alpha = 1;% 学习率
opts.batchsize = 2; %批训练大小 batchsize整数倍必须是总训练样本大小,选择更小的批数据 这样计算的更快,电脑所需内存也会大幅减小
opts.numepochs = 100;%学习迭代次数

cnn = cnnsetup(cnn, train_x, train_y);
cnn = cnntrain(cnn, train_x, train_y, opts);
% % 训练误差曲线
figure; plot(cnn.rL);xlabel(‘训练次数次数’);ylabel(‘误差’)
title(‘训练误差曲线’)
save net_cnn cnn PCALoadings
%% 测试模型有效性
% load net_cnn
% 训练集
[er1, bad1 , a1, h1] = cnntest(cnn, train_x, train_y);
disp(‘展示CNN训练集精度’)
train_acc=1-er1
figure
stem(h1);hold on
plot(a1,‘‘)
legend(‘预测输出’,‘期望输出’)
xlabel(‘样本数/个’)
ylabel(‘标签类别’)
title(‘CNN网络输出与期望输出对比–训练集’)
% 测试集
[er2, bad2 , a2, h2] = cnntest(cnn, test_x, test_y);
disp(‘展示CNN测试集精度’)
test_acc=1-er2
figure
stem(h2);hold on
plot(a2,’
’)
legend(‘预测输出’,‘期望输出’)
xlabel(‘样本数/个’)
ylabel(‘标签类别’)
title(‘CNN网络输出与期望输出对比–测试集’)
function net = cnnbp(net, y)
n = numel(net.layers);

%   error
net.e = net.o - y;
%  loss function
net.L = 1/2* sum(net.e(:) .^ 2) / size(net.e, 2);

%%  backprop deltas
net.od = net.e .* (net.o .* (1 - net.o));   %  output delta
net.fvd = (net.ffW' * net.od);              %  feature vector delta
if strcmp(net.layers{n}.type, 'c')         %  only conv layers has sigm function
    net.fvd = net.fvd .* (net.fv .* (1 - net.fv));
end

%  reshape feature vector deltas into output map style
sa = size(net.layers{n}.a{1});
fvnum = sa(1) * sa(2);
for j = 1 : numel(net.layers{n}.a)
    net.layers{n}.d{j} = reshape(net.fvd(((j - 1) * fvnum + 1) : j * fvnum, :), sa(1), sa(2), sa(3));
end

for l = (n - 1) : -1 : 1
    if strcmp(net.layers{l}.type, 'c')
        for j = 1 : numel(net.layers{l}.a)
            net.layers{l}.d{j} = net.layers{l}.a{j} .* (1 - net.layers{l}.a{j}) .* (expand(net.layers{l + 1}.d{j}, [net.layers{l + 1}.scale net.layers{l + 1}.scale 1]) / net.layers{l + 1}.scale ^ 2);
        end
    elseif strcmp(net.layers{l}.type, 's')
        for i = 1 : numel(net.layers{l}.a)
            z = zeros(size(net.layers{l}.a{1}));
            for j = 1 : numel(net.layers{l + 1}.a)
                 z = z + convn(net.layers{l + 1}.d{j}, rot180(net.layers{l + 1}.k{i}{j}), 'full');
            end
            net.layers{l}.d{i} = z;
        end
    end
end

%%  calc gradients
for l = 2 : n
    if strcmp(net.layers{l}.type, 'c')
        for j = 1 : numel(net.layers{l}.a)
            for i = 1 : numel(net.layers{l - 1}.a)
                net.layers{l}.dk{i}{j} = convn(flipall(net.layers{l - 1}.a{i}), net.layers{l}.d{j}, 'valid') / size(net.layers{l}.d{j}, 3);
            end
            net.layers{l}.db{j} = sum(net.layers{l}.d{j}(:)) / size(net.layers{l}.d{j}, 3);
        end
    end
end
net.dffW = net.od * (net.fv)' / size(net.od, 2);
net.dffb = mean(net.od, 2);

function X = rot180(X)
    X = flipdim(flipdim(X, 1), 2);
end

end

效果图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

结果分析

从效果图上看,CNN卷积神经网络水果分类准确率可达到百分子95以上。

展望

CNN是一种深度信念网络,优点在可以处理大输入数据,能训练中自动降维,训练的过程就是降维的过程,缺点是拟合逼近能力不强,收敛面比较平滑,基于这些,可以和其他拟合能力强的神经网络结合,比如极限学习机,RBF等,结合后的神经网络,即可处理大输入数据,又具有无限逼近的能力,有需要扩展的欢迎扫描文章下面的二维码

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

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

相关文章

推荐系统 FM因式分解

reference:知乎 FM算法解析 LR算法没有二阶交叉 如果是id类特征,这里的x是0/1,raw的特征输入就是float,当然,在我的理解里,一般会把raw的特征进行分桶,还是映射到0/1特征,不然这个w…

树莓派测试wifi与eth速率

测试网速方法: 1.安装插件: 首先在树莓派端安装iperf3 sudo apt install iperf3PC端也需要安装iperf3,单击下面网址即可 下载网址 压缩包解压到桌面,文件内容如下图所示: 2.开始测速服务: 树莓派端在…

周报终结者 GitLab 个人工作记录查询器

序言 每周都要写周报,烦死人。为了解救自己,把自己从无聊的工作中抽离出来。 特别写了一个工具。可以查询GitLab中自己一段时间内的所有提交记录。 按照项目和分支进行排序 效果 还可以查询原始的json数据方便自己进行筛选和扩展 使用方式 1.获取个人…

从 1 秒到 10 毫秒!在 APISIX 中减少 Prometheus 请求阻塞

本文介绍了 Prometheus 插件造成长尾请求现象的原因,以及如何解决这个问题。 作者屠正松,Apache APISIX PMC Member。 原文链接 现象 在 APISIX 社区中,曾有部分用户陆续反馈一种神秘现象:部分请求延迟较长。具体表现为&#xf…

Android电视盒子最强看电视app-tvbox配置(视频源)教程

今天给大家分享一下安卓tv上最强的看视频神器-tvbox的配置方法 tvbox是一款影视观看类的软件,各种影视资源都是为你免费提供的,还有海量热门影视为你提供电视直播,让你可以实时在线进行观看以及体验一样,超多影视剧内容你感兴趣的…

实景建模整合了什么优势?有哪些领域应用?

近年来,无接触经济、线上营销模式成为了热门,伴随着国家十四五规划的出台,对数字经济的扶持是巨大的。VR实景迎来了发展新利好,实景建模—专业的倾斜摄影测量三维实景建模平台,为你真实还原现实世界! 实景建…

Homekit智能家居系列一智能触摸面板开关

触摸开关,即通过触摸方式控制的墙壁开关,其感官场景如同我们的触屏手机,只需手指轻轻一点即可达到控制电器的目的,随着人们生活品质的提高,触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

【Adobe】GenP3.0的使用教程

1、Google一下GenP 2、或者直接点击:https://www.reddit.com/r/GenP/ 3、选择GenP 3.0 - NEW 4、点击下载 注:这个地址可以不用科学上网即可下载:https://www.mediafire.com/file/jr0jqeynr4h21f9/Adobe_GenP_3.0.zip/file 5、点击运行 RunM…

【并发基础】操作系统中线程/进程的生命周期与状态流转以及Java线程的状态流转详解

目录 一、操作系统中进程和线程的状态 1.1 进程 1.1.1 进程的概念 1.1.2 进程的状态 1.1.3 进程调度流程图(五状态) 1.1.4 挂起状态 1.1.4 进程调度流程图(六状态和七状态) 1.1.5 睡眠状态 1.1.6 进程的诞生与消亡 1.2 线程 1.2.1…

运营新人必看 eBay申诉的最全资料

eBay作为一个电商交易平台,限制还是不少的。前几篇eBay系列文章发布后,也有些兄弟来向我反应eBay平台的严格程度,很容易因为这样那样的原因就被封掉了,自己也莫名其妙的。龙哥今天就总结一下eBay封号中比较常见的原因和万一被封要…

关于js数据类型的理解

目录标题一、js数据类型分为 基本数据类型和引用数据类型二、区别:传值和传址三、深浅拷贝传值四、数据类型的判断一、js数据类型分为 基本数据类型和引用数据类型 1、基本数据类型 Number、String、Boolean、Null、undefined、BigInt、Symbol 2、引用数据类型 像对…

详解信道估计的发展与最新研究进展(MIMO)

目录 一. MIMO信道估计的重要性 二. 最经典的两种信道估计方法 2.1 最小二乘信道估计(LS) 2.2 最小均方误差信道估计(MMSE) 三. 优化传统的MIMO信道估计技术 四. 介绍压缩感知技术 五. 基于压缩感知的MIMO信道估计 5.1 压缩感知怎么用在MIMO信道估计 5.2 改进压缩感知…

BIO,NIO,AIO

IO模型 用什么样的通道进行数据传输和接收,java支持3种io网络编程模式 BIO NIO AIO BIO 同步阻塞 一个客户端连接对应一个处理线程 BIO示例代码(客户端和服务端) package com.tuling.bio;import java.io.IOException; import java.net.So…

WIFI P2P架构

WI-FI P2P定义架构3个组件组织结构技术标准P2P DiscoveryDevice Discovery(扫描)流程p2p probe 管理帧Group Formation(组网)GO Negotiation(GON)流程P2P Public Action管理帧Provision Discovery&#xff…

Rust Web 进阶(一):Rust异步编程(Tokio)

这一篇将讲解什么是和为什么进行异步编程,Rust 怎么样进行异步编程以及其机制,并且讲解目前 rust 常用的异步编程的函数库。本章的内容来自杨旭老师的教程: https://www.bilibili.com/video/BV16r4y187P4/?spm_id_from333.999.0.0&vd_s…

ADSP21489之CCES开发笔记(七)

一、SPORT简介:ADI21489具有八个独立的同步串行端口(SPORT),可为各种外围设备提供I/O接口。他们是称为SPORT0至SPORT7,每个SPORT都有自己的一组控制寄存器和数据缓冲器,具有一定范围的时钟和帧同步选项。 二、特性:支持…

【云原生】Apisix接入Nacos、K8s服务注册中心自动获取服务

背景我在K8s中部署了两个使用SpringCLoudK8s框架的微服务,每个服务既暴露了HTTP接口方便测试,也暴露了gRpc接口更接近生产,他们的端口如下所示:常规功能上游我们可以在这里配置我们的服务HTTP配置一个HTTP服务,输入地址…

设计模式 - 行为型 - 模板模式学习

现象: 设计模式 - 行为型 - 模板模式学习 介绍: 模板模式的设计思路,在抽象类中定义抽象方法的执行顺序, 并将抽象方法设定为只有子类实现,但不提供独立访问的方法 只能通过已经被安排好的定义方法去执行 可以控制整…

如何快速生成数据字典SQL语句

如何快速生成数据字典SQL语句 一、首先我们找到需要生成的数据字典的国家标准 以民族数据字典为例 打开浏览器搜索民族字典代码表得到如下数据,并把得到的数据存入Excel表格中 国标民族数据字典 国标民族字典 第七次全国人口普查民族代码表与民族国标代码 第七次…

JVM垃圾回收之GCRoots可达性分析

已经死亡的对象,不可达的对象,肯定会被回收。 什么样的对象会被回收? 判定的算法有两种:引用计数法和可达性分析算法。 引用计数法:(不使用这种) 给对象中添加一个引用计数器,每当…