闲谈神经网络--写给初学者(三)

  接上篇。

  前面两篇讲解了神经网络就是一个黑箱,里面有一个一个的小圆球(神经元)连接而成,通过改变神经元的连接方式及各个参数,就可以实现一个符合要求的神经网络。接下来我们来举一个BP神经网络的例子,以加深理解。

  在讲解这个例子之前,大概说一下一个神经网络解决问题的思路:

  1.对要解决的问题进行理解,找到输入输出数据。

  2.把已知的输入输出数据分为两部分:一部分用来训练网络;另外一部分来验证训练的网络到底好不好用。

  3.对输入数据进行预处理及归一化处理。

  4.创建合适的网络,如BP、感知器、RBF、Hopfield等等。(其实是先建立一个神经网络的黑箱子)

  5.设置网络训练参数,例如设置训练函数,学习函数、激活函数等等。

  6.使用输入输出训练网络。(其实是把黑箱子里面的神经元的各个参数给训练和学习合适了)

  7.使用验证数据验证网络。

  8.验证后觉得网络还不错,就可以实际应用,在实际应用过程中,还可以再对模型进行优化、重构等等。

下面开始我们例子的说明,用一个传统的花分类的例子(http://en.wikipedia.org/wiki/Iris_flower_data_set ):大概意思是:给你一朵花的四个特征,神经网络输出它的品种(共有三个品种)。

所以每一个样本的输入:四个数据,代表花的四个特征;输出:一个数据,代表花的品种,分别为1,2,3代表三个不同的品种。

样本数据为:http://files.cnblogs.com/wuguanglei/%E6%95%B0%E6%8D%AE.rar

其中trainData.txt用作训练数据,testData.txt用作验证数据。Matlab程序代码如下:

%0.操作前
clear;
close all;
clc;
%1.读入训练数据
[f1,f2,f3,f4,class] = textread(‘trainData.txt‘ , ‘%f%f%f%f%f‘,150);
input=[f1,f2,f3,f4]‘;%神经网络是一列算做一个样本输入,因此矩阵要转置一下
output=class‘;
%2.输入数据归一化
[input,Se] = mapminmax(input)  ;
minI=Se.xmin;
maxI=Se.xmax;
%3.构造输出数据矩阵
s = length( class) ;%输出为1,2,3,这用1 0 0表示1;0 1 0表示2;0 0 1表示3
output = zeros( 3, s  ) ;
for i = 1 : s
   output( class( i ),i  ) = 1 ;
end

%4.创建神经网络
net = newff( minmax(input) , [70 3] , { ‘logsig‘ ‘logsig‘ } , ‘traingdx‘ ) ; %其中70表示第一层70个神经元,第二层30个神经元,后面几个参数分别设置的是激活函数和训练函数。

%5.设置训练参数
net.trainparam.show = 40 ;
net.trainparam.epochs = 600 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;

%6.开始训练
[net,tr,e] = train( net, input , output ) ;

%7.测试网络
[t1 t2 t3 t4 c] = textread(‘testData.txt‘ , ‘%f%f%f%f%f‘,150);
testInput=[t1,t2,t3,t4]‘;
testInput = mapminmax (testInput ) ;
Y = sim( net , testInput ) ;

%8.统计结果
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
    [m , Index] = max( Y( : ,  i ) )
    if( Index  == c(i)   )
        hitNum = hitNum + 1 ;
    end
end
sprintf(‘识别率是 %0.3f%%‘,100 * hitNum / s2 )

详细讲解看代码注释吧。

就先写到这儿吧,对于入门,应该够了。

============================

最近帮朋友弄了微信公众号,每天早上6点30分,发送一个60秒的语音,有兴趣的朋友不妨关注一下。

微信号:歪理邪说(wailixs)

二维码:

时间: 2024-10-31 08:51:12

闲谈神经网络--写给初学者(三)的相关文章

闲谈神经网络--写给初学者(二)

继续上篇来写.为了使这个神经网络满足我们需要,我们能够改变的东西有: (0)输入输出的格式和质量 (1)各个神经元的权重值W (2)偏置bias,这个改变从广义上说,也算是改变权重W0 (3)激活函数 (4)神经网络层数 (5)每一层神经元个数 (6)神经网络的结构 那么问题又来了,这些参数怎么改变呢?我们一部分一部分的进行讲解. 一.激活函数的选取 下面列出几个激活函数数学定义以及Matlab中的相应函数,大家可以在matlab中用函数画一下,看看他们到底是怎么一个函数. (1) 线性函数 (

闲谈神经网络--写给初学者(一)

写在前面的话:保持一贯的风格,正式开始写之前,先啰嗦一番.介绍神经网络的书籍和文章简直太多了,所以我也不准备用太洋气的话去讲,尽量写的土一点,大家看完文章后,能够对神经网络有一个整体的认识,有所体会,我便达到了目的.接下来再根据自己的问题,去看看大块头的书,练习练习,就好了.如果能够跟自己的学习工作中的问题相结合,应用起来,那便是极好的. ==============正式开始写======== 一.神经网络整体认识 到底什么是神经网络呢?在陷入各种各样概念.名词.理论之前,请务必提醒自己,只有从

为王菲写的第三首歌《中华情》

中华情 传说伏羲与女娲交尾,从此有了人类 炎帝和黄帝中原逐鹿灭蚩尤,从此有了炎黄子孙 尧舜禹,夏商周,殷商人把文字刻在甲骨上,从此有了文字记载 初秋战国,屈原孔子孟子和孙子,还有韩非子 秦王嬴政灭六国,苛政猛于虎,孟姜女苦倒八百里长城 陈胜吴广起义,项羽巨鹿大败秦军,刘邦入关中 楚汉之争,项羽兵败乌江,无颜面对江东父老 刘邦建汉朝,从此有了汉字和汉族,匈奴远走欧洲 诸葛亮隆中对出茅庐,三国鼎足成,可惜阿斗扶不起 唐朝盛世无以伦比 马可波罗游历元大都 明朝郑和七次下西洋 唐诗宋词,明清小说,中医草

一个LINUX高手写给初学者的话(转)

http://www.linuxdiyf.com/viewarticle.php?id=168606 现在好多的人开始接触电脑的时候,见到的应该是Windows98 说实话,98 已经是一个很人性化,封装的很好的一个系统了 一个对电脑一窍不通的人都能很快的使用它.这样很多人对 "电脑"的印象和那些和我一样一开始接触的是DOS人是绝然不 同的.在DOS时代,如果你对电脑的基础知识不懂的话是玩不 动它的,不像现在好多人CPU是什么都不知道,却能够是Flash 高手,倾倒MM无数.如果你是这

有计划,坚决执行——写给大三犹豫的女生

[来信] 贺老师: 你好,我是一名计算机专业的大三学生,现在有点迷茫,因为大一大二学了C,Java ,Java web,曾经都坚定信心的要学好,都半途而废了,现在大三了,我激情满满的想学好数据库DBA,但是经常听到这个专业女生不适合,男生优势大,心里还是挺纠结的,想请老师提点建议和意见,还有数据库DBA方向得要老师带,想请老师指点指点. [回信] 看得出,你现在对学好的方向又想打退堂鼓了.当我面对一位年轻人,我很看重他或她自己的兴趣.所以你现在想学DBA,不知是如何想的.如果是经过尝试,觉得喜欢

PCA (主成分分析)详解 (写给初学者) 结合matlab(转载)

一.简介 PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像.这时,我们通常的方法是对图像库中的图片提取响应的特征,如颜色,纹理,sift,surf,vlad等等特征,然后将其保存,建立响应的数据索引,然后对要查询的图像提取相应的特征,与数据库中的图像特征对比,找出与之最近的图片.这里,如果我们为了提

写Action的三种方法

Action类似于servlet,在用户对浏览器输入url访问的时候充当控制器的角色.它在访问时产生,执行execute()之后就销毁了. 写Action是代理事务,它实现的三种方式是: (1)POJO类 (2)继承ActionSupport类 (3)实现Action接口 POJO类 public class ActionPrint { public String execute(){ System.out.println("ActionPrint execute!"); return

写给大三了还迷茫的你

前言: 大三了,作为一名java程序员,你是否觉得自己在学校里只做过一些小玩具的程序,学校里学的课程都是从理论出发,作业什么的都感觉不到有什么用,就算是一个课程设计也不过是小打小闹的基础总结,不知道如何去学习更多的知识,对以后出路感到了迷茫.又或抑你在大一大二的时候都是玩乐中度过的,现在想去努力一把,但却又不知道该如何去做.如果你是这两者中任意的一个,请继续看下去,希望以下的学习内容能给你提供帮助.(注:本文为大二大三并是学习java web 开发方向的同学而写) 基础篇 学习Web的基础知识

写给初学者css优先级问题

首先需要搞清楚几个基本概念 1.内嵌样式: 写在元素标签内的例如:<div style="background-color:red"> </div> 2.内联样式: 写在head的style例如:<head> <style> div{ background-color:red; } </style> </head> 3.外部样式: link标签引入进来的例如:<link rel="styleshee