0
FANN으로 사각형 함수를 근사값으로 계산하려고합니다. 코드는 다음과 같습니다FANN이 제대로 훈련되지 않습니다.
#include "../FANN-2.2.0-Source/src/include/doublefann.h"
#include "../FANN-2.2.0-Source/src/include/fann_cpp.h"
#include <cstdlib>
#include <iostream>
using namespace std;
using namespace FANN;
//Remember: fann_type is double!
int main(int argc, char** argv) {
//create a test network: [1,2,1] MLP
neural_net * net = new neural_net;
const unsigned int layers[3] = {1,3,1};
net->create_standard_array(3,layers);
//net->create_standard(num_layers, num_input, num_hidden, num_output);
net->set_learning_rate(0.7f);
net->set_activation_steepness_hidden(0.7);
net->set_activation_steepness_output(0.7);
net->set_activation_function_hidden(SIGMOID_SYMMETRIC_STEPWISE);
net->set_activation_function_output(SIGMOID_SYMMETRIC_STEPWISE);
net->set_training_algorithm(TRAIN_QUICKPROP);
//cout<<net->get_train_error_function()
//exit(0);
//test the number 2
fann_type * testinput = new fann_type;
*testinput = 2;
fann_type * testoutput = new fann_type;
*testoutput = *(net->run(testinput));
double outputasdouble = (double) *testoutput;
cout<<"Test output: "<<outputasdouble<<endl;
//make a training set of x->x^2
training_data * squaredata = new training_data;
squaredata->read_train_from_file("trainingdata.txt");
net->train_on_data(*squaredata,1000,100,0.001);
cout<<endl<<"Easy!";
return 0;
}
trainingdata.txt은 이것이다 :
10 1 1
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
내가 바로 API와 함께 모든 것을 다했다고 생각합니다. 그러나, 내가 그것을 실행할 때, 나는 결코 훈련과 함께 줄이는 것처럼 보이는 거대한 오류를 얻는다.
Test output: -0.0311087
Max epochs 1000. Desired error: 0.0010000000.
Epochs 1. Current error: 633.9928588867. Bit fail 10.
Epochs 100. Current error: 614.3250122070. Bit fail 9.
Epochs 200. Current error: 614.3250122070. Bit fail 9.
Epochs 300. Current error: 614.3250122070. Bit fail 9.
Epochs 400. Current error: 614.3250122070. Bit fail 9.
Epochs 500. Current error: 614.3250122070. Bit fail 9.
Epochs 600. Current error: 614.3250122070. Bit fail 9.
Epochs 700. Current error: 614.3250122070. Bit fail 9.
Epochs 800. Current error: 614.3250122070. Bit fail 9.
Epochs 900. Current error: 614.3250122070. Bit fail 9.
Epochs 1000. Current error: 614.3250122070. Bit fail 9.
Easy!
내가 잘못 했습니까?
그러나 크기를 조정하면 데이터가 변경되지 않으므로 근사값이 손상됩니다. –
두 가지 선택이 가능합니다. (1) 모든 출력을 상수 (예 : 1e4)로 나눕니다. 테스트 데이터가 오면 1e4로 나눕니다. 문제는 100보다 큰 제곱 수 (100^2 = 1e4)를 예측하지 못할 수 있으며 (2) 숨겨진 출력 레이어와 선형 출력 레이어를 모두 만들면 네트워크에서 자동으로 가중치를 학습하여 사용자가 보유한 출력 값 . – lennon310
"숨겨진 레이어와 출력 레이어를 모두 선형으로 만듭니다"라고 말하면 정품 인증 기능을 의미합니까? –