www.pudn.com > bp_cpp.zip > demo.cpp
// // demo.cpp // 2004-05-06 by ShanLanshan // // 此程序用于测试神经元的库函数 // 它展示了怎样用这个库所生成的多层BP网络来求解宇称问题 // 在Visual Stduio 2003上编译通过,要注意启动运行时信息的支持 #include#include #include #include "public/ann/neuron.h" #include "public/ann/bp/bpneuron.h" #include "public/prob.h" #include "public/ann/annlib.h" #include "public/ann/vec_container.h" #include "public/ann/vector.h" #include "public/ann/annfunc/annfunc.h" #include "Windows.h" #include using namespace ann; int main() { char s[1024]; const char *file = "C:\\bpnet.txt"; for (int i=0; i< 0; ++i) { std::cout << prob_get_range(0, 3) << " "; } //std::cin >> s; AnnLib annlib; if (!annlib.init()) { std::cout << "ann lib init failed\n"; return -1; } AnnFuncGroup *fg; fg = annfunc_get("sign"); assert(fg != NULL); AnnSampleSet ass("宇称5"); { std::ofstream os; os.open("C:\\YC5.txt"); if (os.is_open()) { os << ass; } } return 0; BPNet net; AnnVector vec_input, vec_output, vec_tutor; bool openfile = true; std::ifstream is; if (openfile) is.open(file); if (openfile && is.is_open()) { std::cout << "open file ok\n"; net << is; } else { //assert(net.init("2 * 16 * 8 * 2 * 1")); char initstr[64]; sprintf(initstr, "%d * %s * %d", ass.m_input_division, "100 * 16", ass.m_output_division); std::cout << "Init: " << initstr << std::endl; net.init(initstr); net.mutual_conn(); prob_set_seed(0); net.random(); } //net.set_output_func(annfunc_get("sech6"), 0); net.set_output_func(annfunc_get("sech6"), 1); net.set_output_func(annfunc_get("sin"), 2); //net.set_output_func(annfunc_get("sech6"), 3); net.set_output_func(annfunc_get("sech6_cache")); //net.set_output_func(annfunc_get("sech6")); //net.set_output_func(annfunc_get("sin")); vec_output.set_size(net.get_output_division()); int right = 0, k = 0; time_t t1,t2; t1 = time(NULL); for (int m = 0; m < 1; ++m) { //net.random(); right = 0; std::cout << m << std::endl; for (int i=400000; i>0; --i) { printf("."); ass.get_sample(&vec_input, &vec_tutor); net.set_input(&vec_input); net.convert(); net.get_output(&vec_output); net.learn(&vec_tutor); fg->multi_main(vec_output.get_buffer(), vec_output.get_size(), NULL); vec_output.release_buffer(); if (0 && (i % 100) == 0) { std::cout << i << std::endl; Sleep(10); } //if (i < 200) if (0) std::cout << "\n\nSample" << i << " " << vec_input << std::endl << "tutor : " << vec_tutor << std::endl << "output: " << vec_output << std::endl << std::endl; k ++; if (vec_tutor == vec_output) { ++right; if (right >= 600) break; } else { right = 0; } } } t2 = time(NULL); std::cout << static_cast (t2 - t1) << "seconds passed\n"; std::cout << "Get correct in step " << k << ", ok\n"; std::ofstream fs; fs.open(file); fs << net; std::cin >> s; return 0; }