zoukankan      html  css  js  c++  java
  • 创建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.) ");

        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 ", 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 ",fann_get_errno(reinterpret_cast<struct fann_error *>(ann)));

            fann_destroy(ann);

            

        }

        return 0;

    }

    神经网络是个神马?

    我理解这种BP神经网络跟生物神经网络完全是两回事,这里的神经网络只是从生物神经网络得到灵感,创建的一种计算机识别技术,通过对训练样本的分析总结出一个分类方法(约等于拟合函数),然后将输入代入方法求解,此神经网络适用于计算机分类识别等难于用查表、函数拟合等方法实现的领域,比如图像识别,神经网络计算量巨大,2000年前火过一阵,不过随着互联网泡沫一起淹没了,最近换了个更厚的马甲叫深度学习,由于物理硬件性能以及云计算的兴起,这种极耗计算资源的软件方法回归了。

    还能干啥?

    想用它来做机床误差补偿。

  • 相关阅读:
    我的插件架构
    .net 处理图片亮度
    封装自己的对称加密模块
    漏洞无处不在之窃取你的QQ信息
    写自己的自动升级模块
    抓到一只网马,发文顺便鄙视下360
    .net 3.5的Socket异步完成端口
    检测本机是否登录了指定QQ账号
    C++/CLR写的Data Blocks
    修改的Vista风格多功能日历Demo
  • 原文地址:https://www.cnblogs.com/winshton/p/4882093.html
Copyright © 2011-2022 走看看