⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 它展示了怎样用这个库所生成的三层BP网络来求解那个臭名昭著的XOR问题
💻 TXT
字号:



// demo.cpp
// 2004-05-06 by ShanLanshan
//
// 此程序用于测试神经元的库函数
// 它展示了怎样用这个库所生成的三层BP网络来求解那个臭名昭著的XOR问题
// 在Visual Stduio 2003上编译通过,要注意启动运行时信息的支持
// 并且在包含路径中添加这个库所在的目录



#include <stdio.h>
#include <assert.h>
#include <errno.h>
#include "public/ann/neuron.h"
#include "public/ann/bp/bpneuron.h"
#include "public/prob.h"
#include "public/ann/vec_container.h"
#include "public/ann/vector.h" 
#include "public/ann/annfunc/annfunc.h" 


#include <fstream>

using namespace ann;

static void build_sample(AnnVectorContainer *sample);

int main(int argc, char *argv[])
{
    char s[1024];
    const char *file = "C:\\bpnet.txt"; 

    AnnFuncGroup *fg;
    fg = annfunc_get("sign");
    assert(fg != NULL);


    BPNet net;
    AnnVector vec_input, vec_output, vec_tutor, vec_env;
    AnnVectorContainer sample;

    std::ifstream is;
    is.open(file);
    if (is.is_open()) {
        std::cout << "open file ok\n";
        net << is;
    } else {
        net.init("2 * 2 * 1");
        net >> std::cout;
        net.mutual_conn();
        prob_set_seed(0);
        net >> std::cout;
        net.random();
    }
    net >> std::cout;
    std::cin >> s;

    vec_env.set_size(net.get_interface_division());
    vec_env.get_sub_vector(0, net.get_input_division(), &vec_input);
    vec_env.get_sub_vector(net.get_input_division(), net.get_output_division(), &vec_tutor);
    vec_output.set_size(net.get_output_division());

    build_sample(&sample);


    for (int i=0; i<500; ++i) {
        vec_env = *(sample.get_vector()); 
        net.set_input(&vec_input);
        net.converse();
        net.get_output(&vec_output);
        fg->multi_main(vec_output.get_buffer(), vec_output.get_size(), NULL);
        vec_output.release_buffer();

        std::cout << "\n\nSample" << i << " " << vec_env << std::endl
            << "tutor : " << vec_tutor << std::endl
            << "output: " << vec_output << std::endl
            << std::endl;


    net.learn(&vec_tutor);
    }

    net >> std::cout;

    std::ofstream fs;
    fs.open(file);
    net >> fs;

    std::cin >> s;
    return 0;
}

static void build_sample(AnnVectorContainer *sample)
{
    AnnVector vec;
    int a [][3] = {
        {-1, -1, 1},
        {-1, 1, -1},
        {1, -1, -1},
        {1, 1, 1}
    };

    assert(sample != NULL);

    vec.set_size(3);
    for (int i=0; i<4; ++i) {
        vec->set_element(0, a[i], 3);
        sample->add(vec);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -