創建VS工程使用神經網絡庫——FANN


編譯:

sourceforge上的FANN庫帶VS2010的工程,我機器上裝的VS2005,用不了,愁人,只能手動創建工程了,編譯不過,度娘不管用,翻牆麻煩,用雅虎搜到一個工程的創建配置,調整配置試一下,果然好用,在這里備份一下:

1) 創建一個工程,可以叫"vs2005test".包含所有的庫文件(.h和.c),除了這幾個文件(這點很重要): floatfann.h, floatfann.c, fixedfann.h, fixedfann.c, doublefann.h , doublefann.c。
2) "工程屬性 -> C/C++ -> 常規 ->附加包含目錄"添加include路徑。
3) 添加預處理器定義: (工程屬性->C/C++ -> 預處理器 -> 預處理器定義)
_CRT_SECURE_NO_WARNINGS
_USRDLL
FANN_DLL_EXPORTS
WIN32
_WINDOWS
_DEBUG
_CRT_SECURE_NO_DEPRECATE
4) 配置 工程屬性 -> 常規 -> 配置類型 = 動態庫 (.dll)
5) 編譯.ok!

測試:

調試的話,再建個控制台工程,包含該dll和庫,添加main.cpp,測試代碼如下:

#include <stdio.h>

#include "floatfann.h"

 

int main()

{

    printf("Please Enter Command:(\"t\":Train,\"c\":Calculate,\"v\":Verification.)\n");

    char c = getchar();

    if('t' == c)

    {

        const unsigned int num_input = 2;

        const unsigned int num_output = 1;

        const unsigned int num_layers = 3;

        const unsigned int num_neurons_hidden = 1024;

        const float desired_error = (const float) 0.001;

        const unsigned int max_epochs = 500000;

        const unsigned int epochs_between_reports = 1000;

 

        struct fann *ann = fann_create_standard(num_layers, num_input, num_neurons_hidden, num_output);

 

        //fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);

        //fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);

 

        fann_train_on_file(ann, "train.data", max_epochs, epochs_between_reports, desired_error);

 

        fann_save(ann, "test.net");

 

        fann_destroy(ann);

    }

    else if('c' == c)

    {

        fann_type *calc_out;

        fann_type input[2];

 

        struct fann *ann = fann_create_from_file("test.net");

 

        input[0] = 1;

        input[1] = 1;

        calc_out = fann_run(ann, input);

 

        printf("xor test (%f,%f) -> %f\n", input[0], input[1], calc_out[0]);

 

        fann_destroy(ann);

    }

    else if('v' == c)

    {

        struct fann *ann = fann_create_from_file("test.net");

        struct fann_train_data *data = fann_read_train_from_file("verification.data");

        fann_reset_errstr(reinterpret_cast<struct fann_error *>(ann));

        for (int i=0;i != data->num_data;i++)

        {

            fann_test(ann,data->input[i],data->output[i]);

        }

        printf("Mean Square Error:%f\n",fann_get_errno(reinterpret_cast<struct fann_error *>(ann)));

        fann_destroy(ann);

        

    }

    return 0;

}

神經網絡是個神馬?

我理解這種BP神經網絡跟生物神經網絡完全是兩回事,這里的神經網絡只是從生物神經網絡得到靈感,創建的一種計算機識別技術,通過對訓練樣本的分析總結出一個分類方法(約等於擬合函數),然后將輸入代入方法求解,此神經網絡適用於計算機分類識別等難於用查表、函數擬合等方法實現的領域,比如圖像識別,神經網絡計算量巨大,2000年前火過一陣,不過隨着互聯網泡沫一起淹沒了,最近換了個更厚的馬甲叫深度學習,由於物理硬件性能以及雲計算的興起,這種極耗計算資源的軟件方法回歸了。

還能干啥?

想用它來做機床誤差補償。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM