ANN—— Artificial Neural Networks 人工神经网络

//定义人工神经网络
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.;

两种训练方法:BACKPROP 与 RPROP

BACKPROP的两个参数:

RPROP的四个参数:

//  training data
float labels[][] = {{,,,,},{,,,,},{,,,,}};
Mat labelsMat(, , CV_32FC1, labels); float trainingData[][] = { {,,,,},{,,,,}, {,,,,} };
Mat trainingDataMat(, , CV_32FC1, trainingData);
// layerSizes设置了有三个隐含层的网络结构:输入层,三个隐含层,输出层。输入层和输出层节点数均为5,中间隐含层每层有两个节点 Mat layerSizes=(Mat_<int>(,) << ,,,,); //create第二个参数可以设置每个神经节点的激活函数,默认为CvANN_MLP::SIGMOID_SYM,即Sigmoid函数
//同时提供的其他激活函数有Gauss(CvANN_mlp::GAUSSIAN)和阶跃函数(CvANN_MLP::IDENTITY)。
 bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);   //CvANN_MLP::SIGMOID_SYM  
bp.train(trainingDataMat, labelsMat, Mat(),Mat(), params);
//预测新节点
Mat sampleMat = (Mat_<float>(,) << i,j,,,);
Mat responseMat;
bp.predict(sampleMat,responseMat);

float CvANN_MLP::predict(constMat&inputs,Mat&outputs)

图像进行特征提取,把它保存在inputs里,通过调用predict函数,我们得到一个输出向量,它是一个1*nClass的行向量,

其中每一列说明它与该类的相似程度(0-1之间),也可以说是置信度。我们只用对output求一个最大值,就可得到结果。

完整代码:

#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; //(Back Propagation,BP)反向传播算法
params.bp_dw_scale=0.1;
params.bp_moment_scale=0.1; float labels[][] = {{0.9,0.1},{0.1,0.9},{0.9,0.1},{0.1,0.9},{0.9,0.1},{0.9,0.1},{0.1,0.9},{0.1,0.9},{0.9,0.1},{0.9,0.1}};
//这里对于样本标记为0.1和0.9而非0和1,主要是考虑到sigmoid函数的输出为一般为0和1之间的数,只有在输入趋近于-∞和+∞才逐渐趋近于0和1,而不可能达到。
Mat labelsMat(, , CV_32FC1, labels); float trainingData[][] = { {,},{,}, {,}, {,},{,}, {,}, {,},{,}, {,}, {,} };
Mat trainingDataMat(, , CV_32FC1, trainingData);
Mat layerSizes=(Mat_<int>(,) << , , , , ); //5层:输入层,3层隐藏层和输出层,每层均为两个perceptron
bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);
bp.train(trainingDataMat, labelsMat, Mat(),Mat(), params);
int width = , height = ;
Mat image = Mat::zeros(height, width, CV_8UC3);
Vec3b green(,,), blue (,,); for (int i = ; i < image.rows; ++i)
{
for (int j = ; j < image.cols; ++j)
{
Mat sampleMat = (Mat_<float>(,) << i,j);
Mat responseMat;
bp.predict(sampleMat,responseMat);
float* p=responseMat.ptr<float>();
//
if (p[] > p[])
{
image.at<Vec3b>(j, i) = green;
}
else
{
image.at<Vec3b>(j, i) = blue;
}
}
}
// Show the training data
int thickness = -;
int lineType = ;
circle( image, Point(, ), , Scalar( , , ), thickness, lineType);
circle( image, Point(, ), , Scalar( , , ), thickness, lineType);
circle( image, Point(, ), , Scalar( , , ), thickness, lineType);
circle( image, Point(, ), , Scalar( , , ), thickness, lineType);
circle( image, Point(, ), , Scalar(, , ), thickness, lineType);
circle( image, Point(, ), , Scalar(, , ), thickness, lineType);
circle( image, Point(, ), , Scalar(, , ), thickness, lineType);
circle( image, Point(, ), , Scalar(, , ), thickness, lineType);
circle( image, Point(, ), , Scalar(, , ), thickness, lineType);
circle( image, Point(, ), , Scalar(, , ), thickness, lineType); imwrite("result.png", image); // save the image imshow("BP Simple Example", image); // show it to the user
waitKey(); return ;
}

OpenCV——ANN神经网络的更多相关文章

  1. 目前所有的ANN神经网络算法大全

    http://blog.sina.com.cn/s/blog_98238f850102w7ik.html 目前所有的ANN神经网络算法大全 (2016-01-20 10:34:17) 转载▼ 标签: ...

  2. opencv BP神经网络使用过程

       1.OpenCV中的神经网络 OpenCV中封装了类CvANN_MLP,因而神经网络利用很方便.   首先构建一个网络模型:     CvANN_MLP ann;     Mat structu ...

  3. OpenCV 之 神经网络 (一)

    人工神经网络(ANN) 简称神经网络(NN),能模拟生物神经系统对真实物体所作出的交互反应,是由具有适应性的简单单元(称为神经元)组成的广泛并行互连网络. 1  神经元 1.1  M-P 神经元 如下 ...

  4. ANN神经网络——实现异或XOR (Python实现)

    一.Introduction Perceptron can represent AND,OR,NOT 用初中的线性规划问题理解 异或的里程碑意义 想学的通透,先学历史! 据说在人工神经网络(artif ...

  5. ANN神经网络——Sigmoid 激活函数编程练习 (Python实现)

    # ---------- # # There are two functions to finish: # First, in activate(), write the sigmoid activa ...

  6. OpenCV进阶之路:神经网络识别车牌字符

    1. 关于OpenCV进阶之路 前段时间写过一些关于OpenCV基础知识方面的系列文章,主要内容是面向OpenCV初学者,介绍OpenCV中一些常用的函数的接口和调用方法,相关的内容在OpenCV的手 ...

  7. 使用HOG特征+BP神经网络进行车标识别

    先挖个坑,快期末考试了,有空填上w 好了,今晚刚好有点闲,就把坑填上吧. //-------------------------------开篇---------------------------- ...

  8. OpenCV——手势识别

    使用ANN神经网络训练数据后进行手势识别. #include "header.h" int main() { ; //训练每类图片数量 ; //训练类数3:石头剪刀布 ; ; st ...

  9. Python实现一个简单的微信跳一跳辅助

    1.  前言 微信的跳一跳相信大家都很熟悉了,而且现在各种外挂.辅助也是满天飞,反正本人的好友排行榜中已经是八九百都不足为奇了.某宝上一搜一堆结果,最低的居然只要3块多,想刷多少分就刷多少分,真是离谱 ...

随机推荐

  1. poj1127 Jack Straws(线段相交+并查集)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Jack Straws Time Limit: 1000MS   Memory L ...

  2. PHP二维数组排序函数

    PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义: functi ...

  3. python学习第十天 -- 函数

    稍微学过其他编程语言的人都应该了解函数的概念.在这里就不做过多的介绍. Python内置了很多有用的函数,我们可以也直接调用. 可以直接从Python的官方网站查看文档: http://docs.py ...

  4. Python学习笔记整理(三)Python中的动态类型简介

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

  5. WCF-IIS-PDA

    PDA调用WCF 一 IIS托管WCF 项目从开始是用IIS托管的WCF,但一直出错,到最后也没有搞定,希望哪位大神知道的话可以指点. 错误如下: There was no endpoint list ...

  6. php 过滤html标签的函数

    1:strip_tags(string,allow)用来过滤html标签,参数string必须,allow是指定允许哪些标签通过. 例如: <?php $info='<a href=&qu ...

  7. 深入浅出Node.js (10) - 测试

    10.1 单元测试 10.1.1 单元测试的意义 10.1.2 单元测试介绍 10.1.3 工程化与自动化 10.1.4 小结 10.2 性能测试 10.2.1 基准测试 10.2.2 压力测试 10 ...

  8. 【转】Android开源项目发现---ListView篇(持续更新)

    原文网址:http://blog.csdn.net/krislight/article/details/20211045 资料转载地址:https://github.com/Trinea/androi ...

  9. poj2689:素数筛

    题目大意,给定l和u,求区间[l,u]内的素数中,相邻两个差最大和最小的素数其中 u的范围达到了2e9本质上需要找出n以内的所有素数,使用筛法.先保存50000(大于sqrt(2e9))内的所有素数, ...

  10. hdu4622-Reincarnation(后缀自动机)

    Problem Description Now you are back,and have a task to do:Given you a string s consist of lower-cas ...