2012-03-08 3 views
2

Я экспериментировал с библиотекой FANN, которая, кажется, является отличной библиотекой для нейронной сети, и у меня возникла проблема с ее использованием.Использование библиотеки FANN

То, что я пытаюсь сделать здесь, - это обучение нейронной сети ради возиться с библиотекой, давая ей вход и ожидая выхода.

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):

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 

полный набор данных можно найти here

Использование массива данных выборки из файла данных обучения , Я должен получить результат, соответствующий этому, не так ли? Однако, если я сделаю следующее, я получаю 0 в качестве вывода ...

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; 

Может кто-нибудь действительно объяснить мне, что здесь происходит?

Я использую версию fann 2.2.0.

Спасибо

Редактировать: Похоже, что 2.1.0 бета-версии дают ожидаемые результаты, но не версия 2.2.0.

Редактировать 2: На самом деле это была ошибка в версии, которую я использовал.

+0

Вы получили 16969 примеры обучения, поэтому, когда у вас есть MSE (среднеквадратичная ошибка) <0,00001, что не означает, что все предсказано правильно. Ваша сеть даже достигает желаемой ошибки? – alfa

+0

Да. Довольно быстро. – ALOToverflow

+0

Испытывали ли вы какой-либо другой вход? – alfa

ответ

1

Я попытался воспроизвести вашу ошибку, но не смог. Вот моя программа:

#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; 
} 

Это выход:

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 

Может быть, вы могли бы предоставить свой полный комплект обучения?

+0

Я предполагаю, что «test.train» содержит образец набора данных, который я опубликовал с вопросом? – ALOToverflow

+0

Да, я думаю, этого может быть недостаточно для такого сравнения. – alfa

+0

Это совершенно другой файл данных. Это не формат fann. – alfa

0

У меня возникали проблемы в одной точке, причем оба входа и выхода получали разные значения, чем то, из чего я их первоначально установил. Все это сводилось к использованию функции активации, которая отличалась от того, что я ожидал. Я писал об этой проблеме здесь: функция активации

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

по умолчанию FANN_SIGMOID_STEPWISE который является диапазон [0, 1]. Похоже, что все ваши данные находятся между 0 и 1, поэтому его длинный снимок, что это ваша проблема.

Возможно, стоит загрузить файл данных в структуры данных fann, а затем посмотреть, что get_input() и get_output() дает вам гарантию того, что они ожидаются.

Успехов

(если вы нашли то, что происходит, пожалуйста, задайте его здесь для потомства ради)

+0

Проблема возникла только в его версии библиотеки FANN и кажется ошибкой. – alfa

Смежные вопросы