首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FANN库

使用FANN库
EN

Stack Overflow用户
提问于 2012-03-08 04:00:27
回答 2查看 5.2K关注 0票数 2

我一直在试验费恩库,它似乎是一个很好的神经网络库,我对如何使用它有一些问题。

所以我在这里试图做的是训练一个神经网络,为了扰乱库,给它一个输入,并期望一个输出。

代码语言:javascript
复制
FANN::neural_net nn;
const float desired_error = 0.00001;
const unsigned int max_epochs = 500000;
const unsigned int epochs_between_reports = 1000;
const unsigned int layers_count = 3;
const unsigned int layers[layers_count] = {7, 5, 1};
nn.create_standard_array(layers_count, layers);
nn.train_on_file(TRAINING_DATA, max_epochs, epochs_between_reports, desired_error);

下面是我的培训数据文件(TRAINING_DATA)的第一行:

代码语言:javascript
复制
16969 7 1
0.0812069 0.0812069 0.381578 0.0812069 5.8931e-05 0.0843302 0.606695 
1
0.429961 0.0509753 0.381578 0.0266957 0.000117862 0.00707172 0.0221581 
1
0.0983558 0.486888 0.381578 0.000117862 0.0266957 0.00701279 0.0539808 
1
0.0983558 0.486888 0.598562 0.0161471 0.0161471 0.000471448 0.00135541 
1

完整的数据集可以找到这里

使用训练数据文件中的样本数据,我应该得到匹配它的输出,对吗?但是,如果我执行以下操作,则得到0作为输出.

代码语言:javascript
复制
fann_type i[7], *o;
i[0] = 0.429961; i[1] = 0.0509753; i[2] = 0.381578; i[3] = 0.0266957; i[4] = 0.000117862; i[5] = 0.00707172; i[6] = 0.0221581;
o = nn.run(i);
std::cout << "output (run) is " << o[0] << std::endl;

真的有人能解释我这是怎么回事吗?

我使用2.2.0版本的fann。

谢谢

编辑:看起来2.1.0测试版提供了预期的结果,但没有给出2.2.0版本。

编辑2:它实际上是我正在使用的版本中的一个bug。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-09 18:13:18

我试着重复你的错误,但我做不到。这是我的节目:

代码语言:javascript
复制
#include<iostream>
using namespace std;
#include <fann.h>
#include <fann_cpp.h>
#include <floatfann.h>
int main()
{
  FANN::neural_net nn;
  const float desired_error = 0.00001;
  const unsigned int max_epochs = 500000;
  const unsigned int epochs_between_reports = 1000;
  const unsigned int layers_count = 3;
  const unsigned int layers[layers_count] = {7, 5, 1};
  nn.create_standard_array(layers_count, layers);
  nn.train_on_file("test.train", max_epochs, epochs_between_reports, desired_error);

  fann_type i[7];
  i[0] = 0.429961; i[1] = 0.0509753; i[2] = 0.381578; i[3] = 0.0266957; i[4] = 0.000117862; i[5] = 0.00707172; i[6] = 0.0221581;
  fann_type *o = nn.run(i);
  std::cout << "output (run) is " << o[0] << std::endl;

  return 0;
}

这是输出:

代码语言:javascript
复制
Max epochs   500000. Desired error: 0.0000100000.
Epochs            1. Current error: 0.2283857614. Bit fail 4.
Epochs            7. Current error: 0.0000000000. Bit fail 0.
output (run) is 1

也许你能提供你的全套训练?

票数 1
EN

Stack Overflow用户

发布于 2012-04-03 18:00:12

我曾经遇到过一些问题,输入和输出都得到了与我最初设置的值不同的值。这一切归结为使用一个激活函数,它的范围与我所期望的不同。我在这里发布了关于这个问题的文章:

http://leenissen.dk/fann/forum/viewtopic.php?f=1&t=1827

默认的激活函数是FANN_SIGMOID_STEPWISE,它的范围是0,1。看起来所有的数据都在0到1之间,所以这是你的问题所在。

通过将数据文件加载到中,然后看看get_input()和get_output()给您带来了什么,以确保它们是您所期望的,这可能是值得的。

祝好运

(如果你发现了正在发生的事情,为了子孙后代的缘故,请把它张贴在这里)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9612697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档