PythonOpenCV:MLP用于最近邻搜索
一:简单C++版本的链接: http://blog.csdn.net/kaka20080622/article/details/9039749
OpenCV的ml模块实现了人工神经网络(Artificial Neural Networks, ANN)最典型的多层感知器(multi-layer
perceptrons, MLP)模型。由于ml模型实现的算法都继承自统一的CvStatModel基类,其训练和预测的接口都是train(),predict(),非常简单。
下面来看神经网络 CvANN_MLP 的使用~
定义神经网络及参数:
- //Setup the BPNetwork
- CvANN_MLP bp;
- // Set up BPNetwork's parameters
- CvANN_MLP_TrainParams params;
- params.train_method=CvANN_MLP_TrainParams::BACKPROP;
- params.bp_dw_scale=0.1;
- params.bp_moment_scale=0.1;
- //params.train_method=CvANN_MLP_TrainParams::RPROP;
- //params.rp_dw0 = 0.1;
- //params.rp_dw_plus = 1.2;
- //params.rp_dw_minus = 0.5;
- //params.rp_dw_min = FLT_EPSILON;
- //params.rp_dw_max = 50.;
可以直接定义CvANN_MLP神经网络,并设置其参数。 BACKPROP表示使用back-propagation的训练方法,RPROP即最简单的propagation训练方法。
使用BACKPROP有两个相关参数:bp_dw_scale即bp_moment_scale:
使用PRPOP有四个相关参数:rp_dw0, rp_dw_plus, rp_dw_minus, rp_dw_min, rp_dw_max:
上述代码中为其默认值。
设置网络层数,训练数据:
- // Set up training data
- float labels[3][5] = {{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}};
- 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);
- bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM
- //CvANN_MLP::GAUSSIAN
- //CvANN_MLP::IDENTITY
- bp.train(trainingDataMat, labelsMat, Mat(),Mat(), params);
layerSizes设置了有三个隐含层的网络结构:输入层,三个隐含层,输出层。输入层和输出层节点数均为5,中间隐含层每层有两个节点。
create第二个参数可以设置每个神经节点的激活函数,默认为CvANN_MLP::SIGMOID_SYM,即Sigmoid函数,同时提供的其他激活函数有Gauss和阶跃函数。
使用训练好的网络结构分类新的数据:
然后直接使用predict函数,就可以预测新的节点:
- Mat sampleMat = (Mat_<float>(1,5) << i,j,0,0,0);
- Mat responseMat;
- bp.predict(sampleMat,responseMat);
完整程序代码:
- int CCvMLP::main()
- {
- //Setup the BPNetwork
- CvANN_MLP bp;
- // Set up BPNetwork's parameters
- CvANN_MLP_TrainParams params;
- params.train_method=CvANN_MLP_TrainParams::BACKPROP;
- params.bp_dw_scale=0.1;
- params.bp_moment_scale=0.1;
- //params.train_method=CvANN_MLP_TrainParams::RPROP;
- //params.rp_dw0 = 0.1;
- //params.rp_dw_plus = 1.2;
- //params.rp_dw_minus = 0.5;
- //params.rp_dw_min = FLT_EPSILON;
- //params.rp_dw_max = 50.;
- // Set up training data
- float labels[3][5] = {{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}};
- 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);
- bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM
- //CvANN_MLP::GAUSSIAN
- //CvANN_MLP::IDENTITY
- bp.train(trainingDataMat, labelsMat, Mat(),Mat(), params);
- // Data for visual representation
- int width = 512, height = 512;
- Mat image = Mat::zeros(height, width, CV_8UC3);
- Vec3b green(0,255,0), blue (255,0,0);
- // 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);
- int response=0;
- for(int i=0;i<5;i++){
- // cout<<p[i]<<" ";
- response+=p[i];
- }
- if (response >2)
- image.at<Vec3b>(j, i) = green;
- else
- image.at<Vec3b>(j, i) = blue;
- }
- // Show the training data
- int thickness = -1;
- int lineType = 8;
- circle( image, Point(501, 10), 5, Scalar( 0, 0, 0), thickness, lineType);
- circle( image, Point(255, 10), 5, Scalar(255, 255, 255), thickness, lineType);
- circle( image, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
- circle( image, Point( 10, 501), 5, Scalar(255, 255, 255), thickness, lineType);
- imwrite("result.png", image); // save the image
- imshow("BP Simple Example", image); // show it to the user
- waitKey(0);
- }
运行结果:
二:MLP用于图像分类:
二:MLP的Python版本:
PythonOpenCV:MLP用于最近邻搜索的更多相关文章
- SearchRequest用于与搜索文档、聚合、定制查询有关的任何操作
SearchRequest用于与搜索文档.聚合.定制查询有关的任何操作,还提供了在查询结果的基于上,对于匹配的关键词进行突出显示的方法. 1,首先创建搜索请求对象:SearchRequest sear ...
- 统计学习方法——KD树最近邻搜索
李航老师书上的的算法说明没怎么看懂,看了网上的博客,悟出一套循环(建立好KD树以后的最近邻搜索),我想应该是这样的(例子是李航<统计学习算法>第三章56页:例3.3): 步骤 结点查询标记 ...
- sklearn:最近邻搜索sklearn.neighbors
http://blog.csdn.net/pipisorry/article/details/53156836 ball tree k-d tree也有问题[最近邻查找算法kd-tree].矩形并不是 ...
- 基于KD-Tree的最近邻搜索
目标:查询目标点附近的10个最近邻邻居. load fisheriris x = meas(:,:); figure(); g1=gscatter(x(:,),x(:,),species); %spe ...
- Approximate Nearest Neighbors.接近最近邻搜索
(一):次优最近邻:http://en.wikipedia.org/wiki/Nearest_neighbor_search 有少量修改:如有疑问,请看链接原文.....1.Survey:Neares ...
- SIFT算法总结:用于图像搜索
原始文章链接:http://bubblexc.com/y2011/163/ 原文链接:http://blog.csdn.net/cserchen/article/details/5606859 关于三 ...
- 快速近似最近邻搜索库 FLANN - Fast Library for Approximate Nearest Neighbors
What is FLANN? FLANN is a library for performing fast approximate nearest neighbor searches in high ...
- 从零开始一起学习SLAM | 点云平滑法线估计
点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文编程练习框架及数据获取方法见文末获取方式 菜单栏点击"知识星球"查看「从零开始学习SLAM」一 ...
- 搜索系统核心技术概述【1.5w字长文】
前排提示:本文为综述性文章,梳理搜索相关技术,如寻求前沿应用可简读或略过 搜索引擎介绍 搜索引擎(Search Engine),狭义来讲是基于软件技术开发的互联网数据查询系统,用户通过搜索引擎查询所需 ...
随机推荐
- GlobalSign 域名型 SSL 证书
GlobalSign 域名型 SSL 证书,支持通配符型,只验证域名所有权,属于DV 域名验证级SSL证书,无须递交书面审查资料,网上申请便捷有效率.提供40位/56位/128位,最高256位自适 ...
- 【学QT】1 - QT的安装
1.解压文件在/usr/local/下 #tar zxvf qt-x11-free-3.3.8b.tar.gz -C /usr/local 更改文件夹名称为qt #mv /usr/local/qt-x ...
- RDS for MySQL查询缓存 (Query Cache) 的设置和使用
https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 ( ...
- Python获取当前系统时间
Python获取当前系统时间 import time #返回当前时间 def GetNowTime(): return time.strftime("%Y-%m-%d %H:%M:% ...
- BC ROUND 43# 03 HDU 5266
弱啊弱啊,我用了扩展指令,然后大牛告诉我,只对VC++有用,对G++没用的..shit,三题就这样没了. 方法是使用ST在线算法,O(1)查询,然后用线段树维护..呃感觉这个好慢.看了大斌神的是用LC ...
- PHP发展的现状和前景
本人小菜鸟一仅仅,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群. 希望光临本博客的人能够进来交流.寻 ...
- POJ 1128 Frame Stacking(拓扑排序·打印字典序)
题意 给你一些矩形框堆叠后的鸟瞰图 推断这些矩形框的堆叠顺序 每一个矩形框满足每边都至少有一个点可见 输入保证至少有一个解 按字典序输出全部可行解 和上一题有点像 仅仅是这个要打印全部的可行 ...
- 【独立开发人员er Cocos2d-x实战 011】Cocos2dx 3.x命令行生成APK具体解释
Cocos2d-x 3.6项目打包生成apk安卓应用文件,搭建安卓环境的步骤有点繁琐.但搭建一次之后,以后就会很快捷! 过程例如以下: 一.下载安卓环境:搭建Android环境须要用到Android ...
- ScheduleJobFactory
/* * file name: ScheduleJobFactory.java * copyright: Unis Cloud Information Technology Co., Ltd. Cop ...
- HDU1010-奇偶剪枝(DFS)
题目链接:Tempter of the Bone 第一次做剪枝的题目,剪枝,说实话研究的时间不短.好像没什么实质性的进展,遇到题目.绝对有会无从下手的感觉,剪枝越来越神奇了. .. . HDU1010 ...