Критические ошибки при разработке нейросетевой системы

Рассмотрим, на примере как допускаются ошибки при тестировании нейросети. Если у вас нет программы «NeuroSolutions 6», то пропустите дальнейшее описание работы с ней, а рассмотрите результаты и сделанные выводы. В этой книге я не буду рассматривать создание системы на основе «NeuroSolutions». Хотя в принципе, автоматическая нейросетевая система реализована и на основе данного продукта.

Отметим, что следует понимать разницу между обучением и тестированием. Обучать нейросеть можно на любых примерах даже, некорректных для тестового множества – ведь обучение мы проводим на событиях, которые уже произошли. Данный пример взят из реальной жизни. Данный способ работы с нейросетями продавался в интернете. Позиционировался как система, которая дает 80—90% прибыльных сделок. Причем продавец, мне кажется, искренне заблуждался в идеальной результативности данного способа подготовки нейросети. Я делаю этот вывод из того, что ошибка возникала на стадии тестирования отклика сети.

Итак, сначала модернизируем и скомпилируем скрипт для получения исторических данных.

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – +

//| History.mq4 |

//| Copyright © 2009, Andrey Dibrov. |

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – +

#property copyright «Copyright © 2009, Andrey Dibrov.»


int file=FileOpen («history. csv», FILE_CSV|FILE_READ|FILE_WRITE,»;»);

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – +

//| Script program start function |

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – +

void OnStart ()

{

// – —

FileWrite (file,«Open; OpenD; HighD; LowD; CloseD; Max; Min; Date»);


if (file> 0)

{

Alert («Идет запись файла»);

for (int i=iBars (NULL,60) -1; i> =0; i – )

{


FileWrite (file,


iOpen (NULL,60,i),

iOpen (NULL,60,iBarShift (NULL,1440,iTime (NULL,60,i))),

iHigh (NULL,60,iBarShift (NULL,1440,iTime (NULL,60,i))),

iLow (NULL,60,iBarShift (NULL,1440,iTime (NULL,60,i))),

iClose (NULL,60,iBarShift (NULL,1440,iTime (NULL,60,i))),

iCustom (NULL,60,«Max», 0,1440,60,0,i),

iCustom (NULL,60,«Min», 0,1440,60,0,i),

TimeToStr (iTime (NULL,60,i)));

}

}

Alert («Файл записан»);

FileClose (file);

}

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – +


В результате работы скрипта получим файл. Создадим колонку «In» и заполним ее формулой.



Добавим колонку «Out» и заполним ее формулой.



Воспользуемся программой «NeuroSolutions 6». С помощью ее надстройки колонку «In» обозначим как «Input».



А колонку «Out» как «Desired».



Энное количество строк обозначим, как «Training»



Энное количество строк обозначим, как «Cross Validation».



И последние строки как «Production».



Далее создадим файлы для NS6.



Запустим в рабочей среде NS – NeuralBilder.



Здесь мы можем выбрать нейросеть нужной нам архитектуры. Остановимся на первой сети Multilayer perceptron. Нажимаем кнопку с правыми стрелками. Откроется окно Training Data. С помощью кнопки Browse откроем файл TrainingInput.



Далее перейдем в окно Desired Response и откроем файл TrainingDesire.



Откроем окно Cross Val. & Test Data. По умолчанию активно окошечко для ввода текста % of training data for CV. Введем 10%. Программа автоматически зарезервирует данное количество строк под CV из TD. Активировав радиокнопку Read from Separate File, мы можем выбрать файлы сохраненные, нами ранее.



Далее продвигаемся по окнам ничего в них, не меняя, пока в рабочей среде не сформируется нейросеть.



Для лучшей визуализации расширим окно Average Cost и нажмем кнопку Start. Подождем, пока закончится обучение.



Жмем кнопку Testing, Next и в выпадающем окне выбираем Production. С помощью кнопки Browse находим файл ProductionInput.