Советники: Нейросетевой советник - страница 2

 
Sdimm:
Reshetov:

Насколько я понял, в большинстве случаев, причиной ошибки может быть кривизна работы Intel® Threading Building Blocks

Чтобы от этого избавиться, необходимо, отключить параллельный режим работы нейросети, т.е. залезть в код советника через MetaEditor, найти строку 29 и исправить true на false.

Вот так:

static bool Parallel = false;

спасибо за разьяснение исправил код. "вылетать" терминал перестал но оптимизация не идет - разбираюсь пока.


Теперь нужно смотреть в журнал тестера. Что там пишет?

 
Sdimm:
Reshetov:

Насколько я понял, в большинстве случаев, причиной ошибки может быть кривизна работы Intel® Threading Building Blocks

Чтобы от этого избавиться, необходимо, отключить параллельный режим работы нейросети, т.е. залезть в код советника через MetaEditor, найти строку 29 и исправить true на false.

Вот так:

static bool Parallel = false;

спасибо за разьяснение исправил код. "вылетать" терминал перестал но оптимизация не идет - разбираюсь пока.

Вывел parallel в настройки советника, и при оптимизации ставил в true

 
fgth:
Sdimm:
Reshetov:

Насколько я понял, в большинстве случаев, причиной ошибки может быть кривизна работы Intel® Threading Building Blocks

Чтобы от этого избавиться, необходимо, отключить параллельный режим работы нейросети, т.е. залезть в код советника через MetaEditor, найти строку 29 и исправить true на false.

Вот так:

static bool Parallel = false;

спасибо за разьяснение исправил код. "вылетать" терминал перестал но оптимизация не идет - разбираюсь пока.

Вывел parallel в настройки советника, и при оптимизации ставил в true


У меня, кстати, на одном компе с включенным parallel оптимизация проходит успешно, а после установки советника на чарт, терминал вылетает на первом же тике. На других компах все работает в параллельном режиме без проблем.

Оказывается, не все процессоры поддерживают этот режим, хотя они все у меня Intel-овские.

 
Reshetov:
Sdimm:
Reshetov:

Насколько я понял, в большинстве случаев, причиной ошибки может быть кривизна работы Intel® Threading Building Blocks

Чтобы от этого избавиться, необходимо, отключить параллельный режим работы нейросети, т.е. залезть в код советника через MetaEditor, найти строку 29 и исправить true на false.

Вот так:

static bool Parallel = false;

спасибо за разьяснение исправил код. "вылетать" терминал перестал но оптимизация не идет - разбираюсь пока.

Теперь нужно смотреть в журнал тестера. Что там пишет?

а ничего и не пишет - пусто. вернее 2009.12.11 10:54:32 There were 1 passes done during optimization, 1 results have been discarded as insignificant

 

интересно каким образом выбирается количество нейронов в слоях. В статье об этом почему то ни чего не сказано... А ведь это как известно очень важно (!) Малое количетво нейронов может сделать сеть не достаточно гибкой для распознования зависимостей, а сеть с большим количеством нейронов в слоях склонна к "переобучению".

 

Юрий, насколько я понимаю, в код закралась ошибка вот тут:

// Learning
   ann_train (AnnsArray[i], InputVector, train_output);

должно быть:

for (i = 0; i < AnnsNumber; i++) {
   ann_train (AnnsArray[i], InputVector, train_output);
}
 
Henry_White:

Юрий, насколько я понимаю, в код закралась ошибка вот тут:

// Learning
   ann_train (AnnsArray[i], InputVector, train_output);

должно быть:

for (i = 0; i < AnnsNumber; i++) {
   ann_train (AnnsArray[i], InputVector, train_output);
}

Спасибо!

А я то думаю, что так медленно сходятся результаты. Явно было видно, что сетка недоучивалась.

Теперь все ясно!

Ошибка исправлена в коде советника. Всем необходимо проапдейтиться.

 
ingDuke:

интересно каким образом выбирается количество нейронов в слоях. В статье об этом почему то ни чего не сказано...

Потому что на такие вопросы никто не даст однозначных ответов. Обоснованной методики по архитектурам неросетей в природе не существует.

 

Юрий, кажется я нарыл еще оду неточность в коде... Ковырялся в своем коде на предмет странности результатов обучения и нашел вот что:

double ann_pnn() {
...
    ret = 2 * ret / AnnsNumber;

нужно:

ret = ret / AnnsNumber;

Дело в том, что автор библиотеки в своем советнике, по непонятным для меня причинам, разбил сетку пополам для коротких и длинных позиций на соотв-но четные и нечетные с соотв-щими циклами:

for (i = 0; i < AnnsNumber; i += 2) - для четных С ПРИРАЩЕНИЕМ "2" !!!
for (i = 1; i < AnnsNumber; i += 2) - для нечетных

Отсюда и двойка в знаменателе. В нашем с Вами случае она не нужна. Хотя понятно, что на результаты обучения это не сильно повлияет...

Для меня вообще смысл этого цикла (функции ann_pnn и run_anns) ускользает напрочь...

for (i = 0; i < AnnsNumber; i++) {    ret += AnnOutputs[i];    }

Если мы имеем сетку с одним выходным нейроном, откуда у нас 16 выходов?!... Или это комитет из 16-ти сеток? К чему я собственно и склоняюсь... Тогда вопрос: а нафига? Я пока тоже оставил этот кусок неизменным, пока не разберусь с его смыслом окончательно... Может у кого есть мысли по этому поводу? Поделитесь пожалуйста...

 

Лично я не разбрасываю файлы по диску, а держу все в стандартном месте

#define ANN_PATH "experts\\files\\ANN\\"