程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深度學習神經網絡純C語言基礎版

深度學習神經網絡純C語言基礎版

編輯:關於C語言

深度學習神經網絡純C語言基礎版


當今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;i0;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之間

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved