FANN:将输出作为输入反馈到run()(C+;+;) 我使用C++的FRAN包装器,并从时间序列输入中训练了一个预测器。现在我想看看将网络输出作为输入反馈会产生什么样的序列

FANN:将输出作为输入反馈到run()(C+;+;) 我使用C++的FRAN包装器,并从时间序列输入中训练了一个预测器。现在我想看看将网络输出作为输入反馈会产生什么样的序列,c++,fann,C++,Fann,我最初尝试过: fann_type *previousOutput = net.run(previousOutput); 其结果是: Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7bc51fb in fann_run () from /usr/local/lib/libfann.so.2 (gdb) bt #0 0x00007ffff7bc51fb in fann_run () from /usr/local

我最初尝试过:

fann_type *previousOutput = net.run(previousOutput);
其结果是:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7bc51fb in fann_run () from /usr/local/lib/libfann.so.2
(gdb) bt
#0  0x00007ffff7bc51fb in fann_run () from /usr/local/lib/libfann.so.2
#1  0x000000000040161f in FANN::neural_net::run (this=0x7fffffffe420, 
    input=0x7fffffffe5b8) at /usr/local/include/fann_cpp.h:1107
#2  0x000000000040118d in run () at generate_dream.cpp:34
#3  0x000000000040133b in main (argc=1, argv=0x7fffffffe5a8)
    at generate_dream.cpp:55
我还尝试:

fann_type *tmpOutput = net.run(previousOutput);
previousOutput = *tmpOutput; // feedback loop.
这会导致相同的错误

那么正确的方法是什么呢?问题似乎在于run()返回的是指针,而不是实际数据

此外,由于我的输入在我的训练数据中是离散的(0和1缩放为-1和1),我可能需要在反馈之前离散网络输出。这将涉及在网络输出中循环,并构建一个新的离散化值的fann_类型数组,但由于run()需要一个指针,因此我不确定如何做到这一点

谢谢

EDIT1(完整代码列表)
#包括“floatfann.h”
#包括“fann_cpp.h”
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
/测试函数演示FANN C++包装器的用法
无效运行()
{
//加载以前训练过的文件(例如,通过学习顺序)
神经网络;
net.create_from_文件(“learn_sequential.net”);
//加载数据文件
FANN::训练数据;
if(data.read\u train\u from\u文件(“../data/backgroundState\u FANN.data”)){
数据。刻度线数据(-1,1);
//使用数据集中的最后一个模式进行种子设定。
fann_type*previousOutput=data.get_input()[data.length_train_data()];
//梦的长度
for(无符号整数i=0;i<10000;i++)
{
扇型*tmpOutput;
tmpOutput=net.run(以前的输出);
previousOutput=tmpOutput;//反馈循环。
//打印每个
for(无符号整数j=0;jcout如果我单独处理数组元素,那么它将按照我的预期工作:

fann_type *tmpOutput = net.run(previousOutput);

// copy element by element from output to new array.
fann_type newInput[data.num_input_train_data()];
for (unsigned int j = 0; j < data.num_input_train_data(); j++) {
    newInput[j] = tmpOutput[j];
}
previousOutput = newInput; // feedback loop.
fann_type*tmpOutput=net.run(以前的输出);
//将输出中的元素逐个复制到新数组。
fann_type newInput[data.num_input_train_data()];
for(无符号整数j=0;j
如果没有看到更多的代码,我无法确定,但第一种情况似乎是未定义的行为,您需要在使用它之前初始化指针,第二种情况可能是相同的。您能提供更多的代码吗?@ShafikYaghmour。我在上面的问题中列出了完整的程序。我是FANN的新手,所以我不确定如何使用它应该使用指向fann_类型的指针。
fann_type *tmpOutput = net.run(previousOutput);

// copy element by element from output to new array.
fann_type newInput[data.num_input_train_data()];
for (unsigned int j = 0; j < data.num_input_train_data(); j++) {
    newInput[j] = tmpOutput[j];
}
previousOutput = newInput; // feedback loop.