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

神經網絡:計算簡單的加法

編輯:關於C語言

下面是完整的代碼:

//

// fann_test.c :

// FANN 測試

//

// 到下面的網站下載FANN庫:

// Fast Artificial Neural Network Library (fann)

// http://leenissen.dk/fann/

// 下載鏈接: Download FANN ---> C Source Code and Windows DLL files

//


#include "../fann-2.0.0/src/include/doublefann.h"


#ifdef _DEBUG

#pragma comment(lib, "../fann-2.0.0/MicrosoftWindowsDll/bin/fanndoubleMTd.lib")

#else

#pragma comment(lib, "../fann-2.0.0/MicrosoftWindowsDll/bin/fanndoubleMT.lib")

#endif


// 訓練:

// 加法神經網絡

// c = a+b;

void train()

{

const unsigned int num_input = 2; // 輸入項個數

const unsigned int num_output = 1; // 輸出項個數

const unsigned int num_layers = 3;

const unsigned int num_neurons_hidden = 3;

const float desired_error = (const float) 0.00000001;

const unsigned int max_epochs = 500000; // 最多執行次數

const unsigned int epochs_between_reports = 10000; // 報告頻率


struct fann *ann;


int Num = 200;

float Mf = Num*3.f;

int i;

double a, b, c;


FILE *fp;

fopen_s(&fp, "add.fann", "w");

fprintf_s(fp, "%d 2 1\n", Num);


// 生成訓練文件

for(i=1; i<=Num; i++){

// 生成2個數, 要求在(0,1)之間

a = i/Mf;

b = (i+1)/Mf;

c = a+b; // 要求在(0,1)之間


// 輸入內容寫到訓練文件

fprintf_s(fp, "%lf %lf\n%lf\n", a, b, c);

}

fclose(fp);


// 樣本訓練

ann = fann_create_standard(num_layers, num_input, num_neurons_hidden, num_output);


fann_set_activation_function_hidden(ann, FANN_LINEAR );

fann_set_activation_function_output(ann, FANN_LINEAR );


fann_train_on_file(ann, "add.fann", max_epochs, epochs_between_reports, desired_error);

fann_save(ann, "add.fann.net");

fann_destroy(ann);

}

// 執行:

// 測試

void exec(double a, double b)

{

struct fann *ann;


fann_type *calc_out;

fann_type input[2];

ann = fann_create_from_file("add.fann.net");


input[0] = a;

input[1] = b;


calc_out = fann_run(ann, input);

fann_destroy(ann);

printf("a=%f\nb=%f\nc=%f\n期望值c=%f\n\n", input[0], input[1], calc_out[0], input[0]+input[1]);

}


//

// 主程序

//

int main()

{

// 下面的方法只需調用一次, 然後注釋掉

// train();


exec(0.354,0.58934);

exec(0.21469,0.3914968);

exec(0.130,0.44);

exec(-0.3654,0.58455);

exec(0.365420,-0.95);


return 0;

}

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