Я использую библиотеку FANN для создания нейронных сетей для решения проблемы регрессии. Дело в том, что после того, как сети прошли обучение по соответствующему набору учебных кадров (который, кажется, работает достаточно хорошо), каждый тест выводит точный результат. Другими словами, учитывая любое состояние моих 16 прогнозирующих переменных, мой предсказанный результат, согласно ANN, тот же.C++ FANN fann_run всегда производит одинаковый вывод
Я предполагаю, что сеть правильно вычисляет первую строку вычисления, а затем всегда выводит этот результат на другие вычисления, независимо от того, что я кормлю (как это кажется очень хорошо на первом примере обучения, давая точное предсказание).
Например, мой первый учебный пример переменные:
1 1 13.5 13.5 13.5 14.5 14.4 14.3 14.3 14.2 14.5 13 11.7 12.2 12.2 11.3
Моя цель выход 14,5, и на каждом тесте, сеть выдает что-то между 14.69 и 14.7 (из-за малого времени вычислений и, как я только играя с пакетом, я тренирую его каждый раз, когда запускаю код). Итак, этот вывод кажется вполне законным с помощью этого набора данных.
Дело в том, что когда я пытаюсь запустить его на нескольких других входах, я всегда получаю тот же самый 14.69/14.7 (идентичный вывод на наименьшей цифре).
Поскольку сеть, кажется, правильно обрабатывает пример обучения, изучая отношения и вычисляя правильно на одном новом примере тестирования, я склонен полагать, что вся учебная часть верна. Поскольку нет причин, чтобы сеть всегда выводила одно и то же значение, я предполагаю, что мой способ тестирования неверен.
Мой вопрос: какой точный синтаксис для проверки нейронной сети FANN на новый набор данных? и как мне печатать/сохранять соответствующие выходы?
Вот текущее состояние моего кода:
fann_type *calc_out;
fann_type input[16];
for (int i = 0; i < 20; i++)
{
if (!rowHasNA(timeSerie, i))
{
cout << "Input : ";
for (int j = 1; j < 17; j++)
{
input[j - 1] = timeSerie(i, j);
cout << input[j - 1] << " ";
}
cout << endl;
calc_out = fann_run(ann, input);
cout << "Input " << i << " gives : " << calc_out[0] << endl;
}
}
Где:
rowHasNA
это пользовательская функция Я использовал, чтобы определить, есть ли мой пример, по крайней мере один NAann
является afann*
, который уже подготовленtimeSerie
являетсяmatrix<double>
где каждая строка является тестовым примером
Я все еще немного смущен тем, как работает пакет FANN, поскольку я не нашел действительно четкой документации о том, как обучать сети и тестировать их. Я изо всех сил пытаюсь понять, как работает fann_type
.
Заранее спасибо.
просто масштабируйте функции перед тренировкой и запуском –