代码地址如下:
http://www.demodashi.com/demo/11138.html

一、准备工作

  • 需要准备什么环境

需要安装有Visual Studio并且配置了OpenCV。能够使用OpenCV的core模块。

使用者需要有基本的C++编程基础。

  • 本例子实现什么功能

本例实现了简单的深度神经网络,基于OpenCV的矩阵类Mat。程序实现了BP算法,支持创建和训练多层神经网络,支持loss可视化。支持模型的保存和加载。

二、示例代码

新建和初始化一个神经网络的过程非常简单,像下面这样:

	//Set neuron number of every layer
vector<int> layer_neuron_num = { 784,100,10 }; // Initialise Net and weights
Net net;
net.initNet(layer_neuron_num);
net.initWeights(0, 0., 0.01);
net.initBias(Scalar(0.5));

训练神经网络也很容易,下面是一个例子。训练完之后可以保存模型

#include"../include/Net.h"
//<opencv2\opencv.hpp> using namespace std;
using namespace cv;
using namespace liu; int main(int argc, char *argv[])
{
//Set neuron number of every layer
vector<int> layer_neuron_num = { 784,100,10 }; // Initialise Net and weights
Net net;
net.initNet(layer_neuron_num);
net.initWeights(0, 0., 0.01);
net.initBias(Scalar(0.5)); //Get test samples and test samples
Mat input, label, test_input, test_label;
int sample_number = 800;
get_input_label("data/input_label_1000.xml", input, label, sample_number);
get_input_label("data/input_label_1000.xml", test_input, test_label, 200, 800); //Set loss threshold,learning rate and activation function
float loss_threshold = 0.5;
net.learning_rate = 0.3;
net.output_interval = 2;
net.activation_function = "sigmoid"; //Train,and draw the loss curve(cause the last parameter is ture) and test the trained net
net.train(input, label, loss_threshold, true);
net.test(test_input, test_label); //Save the model
net.save("models/model_sigmoid_800_200.xml"); getchar();
return 0;
}

加载训练过的模型然后直接使用就更加方便了。

#include"../include/Net.h"
//<opencv2\opencv.hpp> using namespace std;
using namespace cv;
using namespace liu; int main(int argc, char *argv[])
{
//Get test samples and the label is 0--1
Mat test_input, test_label;
int sample_number = 200;
int start_position = 800;
get_input_label("data/input_label_1000.xml", test_input, test_label, sample_number, start_position); //Load the trained net and test.
Net net;
net.load("models/model_sigmoid_800_200.xml");
net.test(test_input, test_label); getchar();
return 0;
}

三、文件结构

  • 文件结构

    下载后文件如下:
  • 包含了例子所用的数据(data)
  • 示例程序(examples)
  • 头文件(include)
  • 示例程序训练的模型(models)
  • 实现源代码(src)

四、运行效果

这是以部分minist数据测试的效果图。同时还能实时输出loss值。





C++从零实现简单深度神经网络(基于OpenCV)

代码地址如下:
http://www.demodashi.com/demo/11138.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

C++从零实现简单深度神经网络(基于OpenCV)的更多相关文章

  1. 基于 opencv 的图像处理入门教程

    前言 虽然计算机视觉领域目前基本是以深度学习算法为主,但实际上很多时候对图片的很多处理方法,并不需要采用深度学习的网络模型,采用目前成熟的图像处理库即可实现,比如 OpenCV 和 PIL ,对图片进 ...

  2. 深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用

    深度神经网络(Deep Neural Networks, 简称DNN)是近年来机器学习领域中的研究热点,产生了广泛的应用.DNN具有深层结构.数千万参数需要学习,导致训练非常耗时.GPU有强大的计算能 ...

  3. AlphaGo论文的译文,用深度神经网络和树搜索征服围棋:Mastering the game of Go with deep neural networks and tree search

    转载请声明 http://blog.csdn.net/u013390476/article/details/50925347 前言: 围棋的英文是 the game of Go,标题翻译为:<用 ...

  4. 深度神经网络(DNN)模型与前向传播算法

    深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一个总结. 1. 从感知机 ...

  5. 深度神经网络(DNN)的正则化

    和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结. 1. DNN的L1&L2正则化 想到正则化,我们首先想到的就是L1正则化和L2正 ...

  6. 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”

    来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...

  7. Keras入门(一)搭建深度神经网络(DNN)解决多分类问题

    Keras介绍   Keras是一个开源的高层神经网络API,由纯Python编写而成,其后端可以基于Tensorflow.Theano.MXNet以及CNTK.Keras 为支持快速实验而生,能够把 ...

  8. 一位ML工程师构建深度神经网络的实用技巧

    一位ML工程师构建深度神经网络的实用技巧 https://mp.weixin.qq.com/s/2gKYtona0Z6szsjaj8c9Vg 作者| Matt H/Daniel R 译者| 婉清 编辑 ...

  9. 深度神经网络(DNN)是否模拟了人类大脑皮层结构?

    原文地址:https://www.zhihu.com/question/59800121/answer/184888043 神经元 在深度学习领域,神经元是最底层的单元,如果用感知机的模型, wx + ...

随机推荐

  1. Problem C: 零起点学算法93——矩阵转置

    #include<stdio.h> int main() { ][],b[][]; while(scanf("%d%d",&n,&m)!=EOF) { ...

  2. 【bugku】【RE】file WriteUp

    FILE 查壳后显示无壳,拖进IDA: 运行程序时传递的第一个参数为一个文件名,并打开该文件.下面点进去encode函数分析一下: for循环中每三个为一组,进行Base64的操作,接下来两个if分别 ...

  3. (转)Servlet

    1.  Servlet和GCI的区别? 答:Servlet是基于Java编写的,处于服务器进程中,它能够通过多线程方式运行service()方法,一个实例可以服务于多个请求,而且一般不会销毁:而CGI ...

  4. Weui 文件上传完整版示例

    部分思路借用网友,部分是自己细化的. 先声明. 不多说,参考代码 @{ ViewBag.Title = "费用填报"; Layout = "~/Views/Shared/ ...

  5. Navicat无法连接到MySQL

    今天新装的linux,装好以后想用Navicat连接一下数据库,发现连接不上 思路,捋一下 第一种:Access denied for user 'root'@'localhost' (using p ...

  6. css一些我所不熟练的属性

    <hr />  表示一条横线 css的三种创建方式: 外部样式表 <head> <link rel="stylesheet" type="t ...

  7. tcpdump的使用

    tcpdump命令的控制分4个部分 控制tcpdump行为 -c 控制抓取报文的个数 -p 非混杂模式 -s 限制报文长度,0 为不限制 -w 保存抓取的报文到指定路径 -r 从pcap报文读取报文 ...

  8. python的lxml解析器

    from lxml import etree import codecs import sys from lxml import etree def parser(p): tree = etree.H ...

  9. python编码规范、js编码规范及IDE的检查插件pylint/eslint等

    一.python规范 参考:https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/的风格规范和语 ...

  10. vim文本编辑工具—修改文件内容

    在vim中进行文本替换: 1.替换当前行中的from: :s/from/to/    (其中s是英文单词substitute第一个字母,表示替换的意思) :s/from/to/  ==  :.s/fr ...