创建VS工程使用神经网络库——FANN
2015-10-22 11:08
661 查看
编译:
sourceforge上的FANN库带VS2010的工程,我机器上装的VS2005,用不了,愁人,只能手动创建工程了,编译不过,度娘不管用,FQ麻烦,用雅虎搜到一个工程的创建配置,调整配置试一下,果然好用,在这里备份一下: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年前火过一阵,不过随着互联网泡沫一起淹没了,最近换了个更厚的马甲叫深度学习,由于物理硬件性能以及云计算的兴起,这种极耗计算资源的软件方法回归了。还能干啥?
想用它来做机床误差补偿。
相关文章推荐
- 学习笔记09-网络编程
- Xcode7编译时出现http报错解决方法
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path.(jsp页面报错)
- [Nginx]ngx_http_top_header_filter地址为0
- LoadRunner之自定义HTTP请求
- 我是如何搭起Android app网络层的——介绍篇
- Meta http-equiv属性详解(转)
- HTTP cookies 详解(国外一位大牛的文章)
- eclipse CSV连接:ProxyHTTP:java.io.IOException:proxy error
- 基于tcp和udp的socket通信
- 模拟浏览器请求 HttpClient入门
- Http协议中Cookie详细介绍(转)
- iOS网络连接判断
- ntp时间服务器同步完整配置(ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址))
- svn安装(http访问)、备份、增量备份、恢复
- HTTP协议 (七) Cookie(转)
- nonce和timestamp在Http安全协议中的作用
- Android HTTP实例 使用GET方法和POST方法发送请求
- http协议(一)
- wireshark抓取本地回环数据包