设为首页 加入收藏

TOP

深度学习神经网络纯C语言基础版
2015-07-25 04:46:42 来源: 作者: 【 】 浏览:643
Tags:深度 学习 神经网络 语言基础

当今Deep-Learning已经是火到一定境界了,深度学习神经网络(DNN)在计算机视觉领域的表现可谓见效非凡。当然,工程上运用了卷积神经网络来减少计算量而不是全连结的神经网络-这样计算量实在太大了。但是,对于神经网络来说计算量真的不是问题,因为它的结构能够确保它能够并行计算,一旦网络的每一个单元都能够独立的进行计算,每一层再多的连结也是同时进行计算的。期待硬件神经网络的发展。

\

下面手写了一套任意隐层数神经网络构建的C语言函数,能够方便移植到嵌入式设备中。该程序只是一个基于矩阵全连结形式的基础深度学习网络。运用的学习算法为随机梯度下降法,采用sigmoid函数作为激活函数。在少量样本拟合中表现不错。

?

/*
	深度学习神经网络V1.0
		made by xyt
		2015/7/23
	   使用语言:C

本程序构建多层矩阵形神经网络多输入单输出
学习策略:随机梯度下降
激活函数:sigmoid
使用前必须用srand((unsigned)time(NULL))取随机映射初始值
*/
#ifndef _DNN_H
#define _DNN_H
#include
  
   
#include
   
     #include 
    
      #include 
     
       #define DNN_VEC 8 //输入训练组组数 #define DNN_INUM 5 //输入维度 double dnn_sig(double in){ //sigmoid函数,此处不可变 return 1.0/(1.0+exp(-1.0*in)); } struct dnn_cell{ //神经元结构体 double w[DNN_INUM]; double wb; double in[DNN_INUM]; double out; double error; double v; void SetCell_Default(){ //默认初始化,权值初始化很小 int i; for(i=0;i
      
       0;j--){ l=0; for(i=(j-1)*DNN_INUM;i
       
        具体调用示范如下:
        

?

?

#include
         
          
#includednn.h
using namespace std;
int main()
{
	srand( (unsigned)time(NULL) );
	double expect[8]={0.23,0.23,0.23,0.23,0.83,0.83,0.83,0.83};
	double in[8][5]={1,2,3,4,5,
						 1.1,2.1,3,3.9,5,
						 0.8,2.2,3,4.2,5,
						 0.9,2.1,3,4,5,
						 5,4,3,2,1,
						 4.9,4.1,2.9,2,1,
						 5,4,3.1,2,1,
						 5,4,2.9,2.1,1
						};
		dnn_cell a[16];
		int i;
		for(i=0;i<16;i++) a[i].SetCell_InitAll(rand()*2.0/RAND_MAX-1,0.001);
		DNN_Train(a,4,in,expect,100000);
		double pp[5];
		while(1){
		for(i=0;i<5;i++) cin>>pp[i];
		cout<
          
            注意期望必须在0~1之间
           

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数组的应用OC 下一篇Objective-C的对象模型和runtime..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: