神经网络ANN分类器及OpenCV实现
OpenCV中实现神经网络分类非常简单,使用CvANN_MLP定义分类器,CvANN_MLP_TrainParams设置训练参数,添加训练数据,使用train和predict进行训练和预测。
CvANN_MLP_TrainParams各训练参数说明:
term_crit:训练算法的终止标准,确定算法的最大迭代次数(对序列反向传播算法,该值乘以训练集大小)和两次迭代间权值变化量。
Train_method 训练算法,可以是CvANN_MLP_TrainParams::BACKPROP (随机序列反向传播) 或者CvANN_MLP_TrainParams::RPROP (RPROP,默认值)。
bp_dw_scale(只用于bp网络),该系数乘以计算出的权值梯度,推荐值为0.1。该参数可通过构造函数的param1设置。
bp_moment_scale(只用于bp网络),该系数乘以前两次迭代的权值之差,平滑权值的随机影响,取值从0-1(0对应的特征被disable)或更大,0.1左右已经足够了。可通过构造函数的param1设置
rp_dw0 (RPROP only):权值delta的初始化幅值,默认值为0.1,可通过构造函数的param1设置。
rp_dw_plus(RPROP only):权值delta的增长因子,必须大于1,默认为1.2(根据算法的作者,该值大部分情况下可行)。该参数只能通过修改结构体成员来显式更改。
rp_dw_minus (RPROP only): 权值delta的减小因子,必须小于1,默认为0.5(根据算法的作者,该值大部分情况下可行)。该参数只能通过修改结构体成员来显式更改。
rp_dw_min (RPROP only): 权值delta的最小值,必须大于0,默认为FLT_EPSILON,可通过构造函数param2设置
rp_dw_max (RPROP only): 权值delta的最大值,必须大于1,默认为50,该参数只能通过修改结构体成员来显式更改。
结构体带有默认构造函数,初始化RPROP 算法参数。也有更多构造函数可以定制参数、选择bp算法,单个参数可在结构体创建后调整,使用构造方法初始化时param1可初始化化多个参数,他们往往是一样的
代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
#include <iostream>
#include <string> using namespace std;
using namespace cv;int main()
{CvANN_MLP bp;//设置训练参数CvANN_MLP_TrainParams params;params.train_method = CvANN_MLP_TrainParams::BACKPROP;//训练算法设置为随机序列反向传播//该系数乘以计算出的权值梯度,推荐值为0.1。params.bp_dw_scale = 0.1; //该系数乘以前两次迭代的权值之差,平滑权值的随机影响,取值从0-1(0对应的特征被disable)或更大,0.1左右已经足够了。params.bp_moment_scale = 0.1;//params.train_method=CvANN_MLP_TrainParams::RPROP;//正向传播//params.rp_dw0 = 0.1;//权值delta的初始化幅值,默认值为0.1,可通过构造函数的param1设置。 //params.rp_dw_plus = 1.2;//权值delta的增长因子,必须大于1,默认为1.2(根据算法的作者,该值大部分情况下可行)//params.rp_dw_minus = 0.5;//权值delta的减小因子,必须小于1,默认为0.5(根据算法的作者,该值大部分情况下可行)//params.rp_dw_min = FLT_EPSILON;//权值delta的最小值,必须大于0,默认为FLT_EPSILON //params.rp_dw_max = 50.;//权值delta的最大值,必须大于1,默认为50 //定义训练数据float labels[3][5] = { { 0, 0, 0, 0, 0 }, { 2, 2, 2, 2, 2 }, { 1, 1, 1, 1, 1 } };Mat labelsMat(3, 5, CV_32FC1, labels);float trainingData[3][5] = { { 1, 2, 3, 4, 5 }, { 111, 112, 113, 114, 115 }, { 21, 22, 23, 24, 25 } };Mat trainingDataMat(3, 5, CV_32FC1, trainingData);Mat layerSizes = (Mat_<int>(1, 5) << 5, 2, 2, 2, 5);//神经元的层级结构,分5层,每层分支为5, 2, 2, 2, 5bp.create(layerSizes, CvANN_MLP::SIGMOID_SYM);//分类算法//CvANN_MLP::SIGMOID_SYM//CvANN_MLP::GAUSSIAN //CvANN_MLP::IDENTITY bp.train(trainingDataMat, labelsMat, Mat(), Mat(), params);bp.save("bp.xml");//保存训练结果//计算每个像素的分类int width = 512, height = 512;Mat image = Mat::zeros(height, width, CV_8UC3);Vec3b green(0, 255, 0), blue(255, 0, 0), red(0,0,255);// Show the decision regions given by the SVM for (int i = 0; i < image.rows; ++i)for (int j = 0; j < image.cols; ++j){Mat sampleMat = (Mat_<float>(1, 5) << i, j, 0, 0, 0);Mat responseMat;bp.predict(sampleMat, responseMat);float* p = responseMat.ptr<float>(0);float response = 0.0f;for (int k = 0; k<5; k++){response += p[k];}//labels中0,1,2三种结果,我们分为三种颜色显示if (response >8)image.at<Vec3b>(j, i) = green;else if (response >4)image.at<Vec3b>(j, i) = blue;elseimage.at<Vec3b>(j, i) = red;}imwrite("result.png", image); // save the image imshow("BP Simple Example", image); // show it to the user waitKey(0);}
结果:
图片分辨率为512x512,训练数据有3种结果,对应图中3个分类,分别用了3中颜色显示。
神经网络ANN分类器及OpenCV实现相关推荐
- 福利 | 从生物学到神经元:人工神经网络 ( ANN ) 简介
文末有数据派THU福利哦 [ 导读 ] 我们从鸟类那里得到启发,学会了飞翔,从牛蒡那里得到启发,发明了魔术贴,还有很多其他的发明都是被自然所启发.这么说来看看大脑的组成,并期望因此而得到启发来构建智能 ...
- 卷积神经网络 svm分类器_使用卷积神经网络的狗品种分类器
卷积神经网络 svm分类器 介绍 (Introduction) Do you know the breed of the dog in the picture above? If you don't ...
- 实现人工神经网络ANN对医疗数据分类
2.3 使用ANN对医疗数据分类 IBM在2015年5月宣布推出Watson Health服务,收集健康数据交给Watson超级计算机进行分析.目前IBM Waston Health最主要的应用便是在 ...
- DL之ANN/DNN: 人工神经网络ANN/DNN深度神经网络算法的简介、应用、经典案例之详细攻略
DL之ANN/DNN: 人工神经网络ANN/DNN深度神经网络算法的简介.应用.经典案例之详细攻略 相关文章 DL:深度学习(神经网络)的简介.基础知识(神经元/感知机.训练策略.预测原理).算法分类 ...
- Tensorflow2.x.x最基础的神经网络(ANN)
Tensorflow2.x.x最基础的神经网络(ANN) 本章节主要使用Tensorflow2.x.x来搭建ANN神经网络. ANN原理 这里直接放上小伙伴ANN的原理博客~ 实现 使用ANN实现对M ...
- ann matlab,人工神经网络ann及其matlab仿真.ppt
人工神经网络ann及其matlab仿真 人工神经网络 的研究方法及应用刘 长 安2004. 12. 31 引 言 利用机器模仿人类的智能是长期以来人们认识自然.改造自然和认识自身的理想. 研究ANN目 ...
- Tensorflow实践:用神经网络训练分类器
正文共5873个字,3张图,预计阅读时间15分钟 . 任务: 使用tensorflow训练一个神经网络作为分类器,分类的数据点如下: 螺旋形数据点 原理 数据点一共有三个类别,而且是螺旋形交织在一起, ...
- 神经网络用作分类器(附代码matlab)
神经网络用作分类器 自己实践了一下,对神经网络作分类器有了初步了解. 本文主要内容包括: (1) 介绍神经网络基本原理 (2) Matlab实现前向神经网络的方法 第0节.引例 本文以Fisher ...
- Python基于PyTorch实现BP神经网络ANN回归模型项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...
- Python实现BP神经网络ANN单隐层回归模型项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 20世纪80年代中期,David Runelhart.Geoff ...
最新文章
- Scrum敏捷开发工具Leangoo
- 生成器与迭代器的区别
- JPG图片EXIF信息提取工具exif
- win7 将文件的背景色改为绿色
- 框架:SpringMVC常用注解总结
- Eclipse出现ContextLoaderListener not find
- Java AOP研究之how is my aop2 method called
- react学习(6)----react样式多用内联
- 详细分析如何利用python批量爬取百度图片
- python 编程刷题_一起刷题吧 | 100+Python编程题带你快速上手(附答案)
- iphone已停用怎么解锁_iPhone 已停用怎么办?使用锁屏密码需要注意
- 谷歌开源量子计算框架Cirq
- 拓端tecdat|用Rapidminer做文本挖掘的应用:情感分析
- VS中,DEBUG/RELEASE的宏定义不同引起的问题
- “程序已停止工作”问题的解决方法,停止解决方法
- [轻笔记]Juliav0.6配置jupyter
- dede config.chche.inc.php,dedecms 后台修改系统设置,但是config.cache.inc.php文件不能写入...
- OneNET麒麟座应用开发之九:与SD卡通讯并保存数据
- 数据库管理工具哪个好?强力推荐Navicat Premium 16 mac中文版
- Android安卓——入门学习
热门文章
- LINUX SHELL命令ls只列出目录名
- 全网首发:怎样制作CDKEY(0)-目录
- 机器太慢,导致获取系统剪贴板数据超时
- 编程基本功:while/for循环中,如果有switch,注意break是中断的哪一层
- WORD出错:布局也会超出内容区
- 从海康录像机取RTSP转发流,规律性的断流
- 安装APK时INSTALL_FAILED_ALREADY_EXISTS的解决办法
- is not allowed for source level below 1.7 的解决办法
- 简述RPL, DPL, CPL的区别与联系
- java怎么让二维数组不重复_java - 如何创建具有随机产生的,非重复数二维数组? [重复] - SO中文参考 - www.soinside.com...