使用opencv中的神经网络训练加法运算 1C

请问如何使用opencv3中的神经网络功能,通过训练让神经网络能够实现加法运算?

2个回答

// 
// fann_test.c :  
// FANN 测试 
// 
// 到下面的站点 下载FANN库: 
//   Fast Artificial Neural Network Library (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 1n", 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 %lfn%lfn", 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, "ad");   
    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("ad");     

    input[0] = a; 
    input[1] = b; 
             
    calc_out = fann_run(ann, input); 
    fann_destroy(ann); 

    printf("a=%fnb=%fnc=%fn期望值c=%fnn", 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; 
}  
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐