На радость нейросетевикам, быстрая и бесплатная библиотека для MT4 - страница 9

 
Это комитет 16 сеток, можете глянуть, те файлы, которые создаются.
 
Henry_White >>:

Если мы имеем сетку с одним выходным нейроном, откуда у нас 16 выходов?!... Или это комитет из 16-ти сеток?

Он самый

 

Всем доброго!

Сижу вторую ночь втыкаю кусок кода

void ann_prepare_input () {
    int i;
    double res = 0;
	 for(i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 
      if (MathAbs(res) > 1) {
         if (res > 0) {
            InputVector[i] = 1.0;            
         } else {
            InputVector[i] = -1.0;            
         }
      } else {
         InputVector[i] = res;            
      }
    }
}

не пойму какой смысл заложен в 

if (MathAbs(res) > 1) {
         if (res > 0) {
            InputVector[i] = 1.0;            
         } else {
            InputVector[i] = -1.0;            
         }
      } else {
         InputVector[i] = res;            
      }

если значение res больше единицы не может быть.

Поясните пожалуйста этот момент, если это не секрет конечно.

 
alex_r >>:

Всем доброго!

Сижу вторую ночь втыкаю кусок кода

не пойму какой смысл заложен в 

если значение res больше единицы не может быть.

Поясните пожалуйста этот момент, если это не секрет конечно.

На вход НС должны подаваться нормализованные значения (1;-1). В противном случае обучение НС может привести к неопределенным результатам.

 

ну так, как вычисляется res 

условие 

(MathAbs(res) > 1)
никогда не выполнится и на вход будет подаваться
res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0
а тут в 99,99% случаев естественно получается все, что угодно, но только не 1 и -1
если так
for(i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 

         if (res > 0) {                 
            InputVector[i] = 1.0;            
         } else {
            InputVector[i] = -1.0;            
         }        

    }

тогда будут только 1 и -1

или я ошибаюсь?

 
alex_r >>:

или я ошибаюсь?

Ошибаетесь. Все тут правильно получается. Вам стоит внимательнее изучить код. Он очень простой и очевидный. Смысл Ваших "//" я не понял - они "убивают" смысл напрочь.

iRSI в основном дает значения от 0 до 100 с редкими вылетами за диапазон (поэтому и стоит (MathAbs(res) > 1) ), поэтому res будет в 99.9% случаев лежать в границе 1 и -1, а InputVector - в 100%.

Если вы ждете разбор каждого оператора, то я не думаю, что у кого-то из здесь присутствующих есть возможность давать уроки программирования. И для данного раздела это будет offtopic. Возможно с этим стоит обратиться в другой раздел форума или напишите мне в личку.

PS. Не стоит "комментарить" чужой код (лучше комментировать). Это может ввести в заблуждение других людей да и просто дурной тон имхо. Если не согласны с автором - напишите свой вариант.

 

Убрал закомментированое.

Теперь поясняю, при res>0, тут 0 соответствует уровню 50 индикатора РСИ, присваиваем 1, иначе присваиваем -1

Что непонятного? Минимум кода и ничего лишнего.

Так как написано в исходном коде, главное условие нормализации данных - НЕ ВЫПОЛНЯЕТСЯ.

Единственное, стоит отфильтровать еще ноль, но в данном случае это не столь принципиально.

 
Ваш вариант будет давать занчения или -1 или 1. И зачем все это? И как Вы ЭТИМ собираетесь обучать сеть? А вернее, ЧЕМУ? В чем полезность данной "бинарности" состояний? Как вы из этого построите паттерн для обучения сети?
 
Henry_White >>:

На вход НС должны подаваться нормализованные значения (1;-1). В противном случае обучение НС может привести к неопределенным результатам.

Может вас смутил это пост.. Здесь я имел ввиду диапазон, а не двоичность состояний.

 
alex_r >>:

Так как написано в исходном коде, главное условие нормализации данных - НЕ ВЫПОЛНЯЕТСЯ.

Вы ошибаетесь, т.к. на входах сетки (1-й слой) стоят сигмоиды настроенные на диапазон: -1;1. Поэтому необходимым и достаточным условием нормализации входов является любое значение на них в диапазоне от -1 до 1.


То что Вы пытаетесь соорудить, дык это подменить функцию сигмоида на свою отсебятину, т.е. Signum(input), которая занижает дискретность входных данных ниже плинтуса и соответственно создает ситуации при которых обучающая выборка будет содержать значительное число взаимопротиворечащих друг другу данных.

Причина обращения: