神经网络算法初探

news/2025/4/1 5:03:28/

神经网络算法,其本质其实是一种有向图。从输入层通过节点(神经元)的加权输入到下一层节点,直到输出层。

可以参考知乎上的科普版神经网络

下面所采用的编程语言是matlab

步骤如下所示:

1、读取训练数据,并对其进行归一化

2、构造期望的输出值

3、创建神经网络,并设置训练参数

4、基于训练数据对神经网络进行训练

5、读取测试数据,并对其进行归一化

6、进行仿真

7、统计正确的识别率

将Iris数据集分为2组,每组各75个样本,每组中每种花各有25个样本。其中一组作为以上程序的训练样本,另外一组作为检验样本。为了方便训练,将3类花分别编号为1,2,3 。使用这些数据训练一个4输入(分别对应4个特征),3输出(分别对应该样本属于某一品种的可能性大小)的前向网络。

clc;
clear all;
%读取训练数据
[f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150);
//If N is specified, the format string is reused N times.  If N is -1 (or
//not specified) TEXTREAD reads the entire file.
//该训练数据针对的是3层的神经网络//特征值归一化。
[input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]');
//用于将网络的输入数据或输出数据进行归一化,此处是将输入数据进行归一化!
//[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T) 
//其中P,T分别为原始输入和输出数据,minp和maxp分别为P中的最小值和最大值。
//mint和maxt分别为T的最小值和最大值。 
//此时的minI= min([f1 , f2 , f3 , f4 ]',[],2)
//此时的max =max([f1 , f2 , f3 , f4 ]',[],2)
//训练网络时如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据
//也应该和样本数据接受相同的预处理,这就要用到tramnmx。在下面可以看到其使用情况
//
//构造输出矩阵
s = length( class ) ;
output = zeros( s , 3  );%所期望的输出值
for i = 1 : s output( i , class( i )  ) = 1 ;
end//创建神经网络(feed-forward backpropagation network)
net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ; 
//第1层有10个神经元,第2层有3个神经元,所属层对应的传输函数分别为'logsig' 'purelin'
//net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF)
// PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;
//Si:第i层神经元个数;
// TFi:第i层的传递函数,对于隐含层默认函数为tansig函数;对于输出层则为 'purelin'
//可选:TANSIG, LOGSIG, or PURELIN
// BTF:训练函数,默认函数为trainlm函数;可选:TRAINLM, TRAINBFG, TRAINRP, TRAINGD
// BLF:权值/阀值学习函数,默认函数为learngdm函数;
// PF:性能函数,默认函数为mse函数。
// minmax(input)求解每个行向量中最小值和最大值,返回值第1列为所对应行的最小值,第二列为所对应行的最大值。%设置训练参数
net.trainparam.show = 50 ;//设置数据显示刷新频率,学习次刷新一次图象。显示训练迭代过程
net.trainparam.epochs = 500 ;//设置训练次数
net.trainparam.goal = 0.01 ;//设置训练的目标结果,训练精度 
net.trainParam.lr = 0.01 ;//学习速率
//lr为反向修正时候的步长参数,这个参数越大,网络每次修正的值越大,
// 收敛快,网络最终结果可能差,小,每次修正的值越小,收敛慢,
// 但是网络最终的结果可能比较好%开始训练
net = train( net, input , output' ) ;%读取测试数据
[t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);%测试数据归一化
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;
// [Pn]=tramnmx(P,minp,maxp) 
//其中P和Pn分别为变换前、后的输入数据,
//maxp和minp分别为premnmx函数找到的最大值和最小值。 
%%
%仿真
Y = sim( net , testInput ) //统计识别正确率
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2[m , Index] = max( Y( : ,  i ) ) ;if( Index  == c(i)   ) hitNum = hitNum + 1 ; %当最大值所在的行数与c(i)相等时,即为正确值
//         if(Index>1)
//             disp(Index);
//         endend
end
sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )



http://www.ppmy.cn/news/522053.html

相关文章

蓝桥杯 基础练习 十六进制转八进制

http://lx.lanqiao.cn/problem.page?gpidT51 题意:将16进制数转化为8进制数 思路:由于字符串比较长,所以只能通过字符串模拟来做。先将16进制转为2进制,再逆序将2进制转化为8进制。这么做的原因是:每4位二进制刚好对…

无法通过8192在表空间中扩展

今天在oracle数据库表里面删除数据的时候,弹框提示说“无法通过8192在表空间中扩展”,发现增删改都会提示这个问题,这下就郁闷了。最后请教了下公司的老前辈才知道了是数据库的表空间不够了,后来在老前辈的指导下将这个问题解决了…

基于迪文T5L1单芯片的车牌识别功能实现

基于迪文T5L1芯片的车牌识别功能,是通过T5L1接收并处理OV2640摄像头拍摄的车牌号图片、抓取车牌字符信息来实现的。图片处理过程借助了DGUS平台的基本显示功能,可在一定程度上减少二次开发工作。 一、视频演示 基于T5L1的车牌识别方案 二、迪文车牌识别…

视觉里程计 -- 单层多层 直接法(附代码解析)

直接法是根据像素的亮度信息(Intensity)来估计相机的运动。 还记得估计相机的运动有以下方法: 1.提取特征点和描述子,比如SIFT,FAST特征点,不同视角的图片特征点匹配,然后用对极几何,PnP或ICP法…

git报错 - Your branch and ‘xxx/xxx‘ have diverged

报这个错就是因为你和远程库出现分叉了 #mermaid-svg-21jvusaqPFOsDmNx .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-21jvusaqPFOsDmNx .label text{fill:#333}#mermaid-svg-21jvusaqPFOsDmNx…

C#程序设计练习题十七: 问题 E: C#统计字符出现的个数

题目描述 编写一个实例方法getCountChar方法。该方法参数有两个,第一个参数可以是字符串s,第二个参数为字符c,方法返回值为第二个参数在第一个参数中出现次数。例如,CountChar("6221982",2)返回值为3。 部分程序代码已…

win7 配置apache24 https访问

部署普通站点 1、首先下载apache24版本,下载地址为http://pan.baidu.com/s/1pLmvDgB; 2、解压到你的电脑本地目录,如D:\Apache24(下文配置都会以当前目录作为参考说明) 3、修改D:\Apache24\conf\目录下的httpd.conf文件 主要修改点在以下几个方面:&am…

T51:字符流中第一个未重复的字符(Java)

题目;* 请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。 当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是&q…