Обсуждение статьи "Нейросети - это просто" - страница 8

 

Здравствуйте, Дмитрий,

Я работаю над первыми двумя частями вашей серии "Нейронные сети" уже несколько недель, и постоянно натыкаюсь на следующий код при циклическом переборе нейронов (или других вещей).

Я действительно не понимаю - с моей точки зрения, в этом коде всегда должен отсутствовать последний элемент. Функции Total() должны возвращать счетчик, затем вы удаляете один элемент и используете "<" в цикле for. Таким образом, для подсчета Total(), равного 2, вы запустите цикл for только один раз.

Что я упустил?

С уважением,

Delf


   int total=Layer.Total()-1;
   for(int n=0; n<total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
 

в некоторых частях кода вы написали что-то вроде:

int total=Layer.Total()-1;
   for(int n=0; n<total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
  }

но предположим, что у нас 20 нейронов в слое, и мы присваиваем переменной total значение 19 [int total=Layer.Total()-1], так что теперь total равно 19, когда мы итерируем нейроны с индекса 0-18 (total=19), мы никогда не достигаем индекса 19 (последний нейрон), я думаю, мы должны изменить код на:

int total=Layer.Total();
   for(int n=0; n<=total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
  }

или

int total=Layer.Total()-1;
   for(int n=0; n<= total; n++)
     {
      CNeuron *neuron=Layer.At(n);
      resultVals.Add(neuron.getOutputVal());
     }
  }

чтобы достичь последнего нейрона в слое.

Какова ваша идея?

 
Hedayat Yazdani:

в каком-то коде вы написали что-то вроде:

[int total=Layer.Total()-1], так что теперь total равен 19, когда мы итерируем нейроны с индекса 0-18 (total=19), мы никогда не достигаем индекса 19 (последний нейрон), я думаю, что мы должны изменить код на:

или

чтобы достичь последнего нейрона в слое.

Какова ваша идея?

На каждом слое мы добавляем еще один нейрон для байесовского сдвига. Поэтому при вызове функции для создания слоя с 20 нейронами мы создаем 21 нейрон. И Layer.Total() вернет 21. Но входные данные будут содержать только 20 элементов. Последний нейрон байесовского сдвига всегда имеет на выходе '1'. Поэтому я использую Layer.Total()-1. В цикле я использую "<", потому что первый элемент массива имеет индекс '0'.

 
Добрый вечер, я хотел бы узнать, можете ли вы создать советник, индикатор или скрипт?
 
MetaQuotes:

Вышла новая статья Neural Networks Made Easy:

Автор Дмитрий Гизлык

Здравствуйте, впервые изучаю нейронные сети, ваша статья мне очень подходит, но я хотел бы узнать, почему во многих местах нужно ставить -1, например: nextLayer.Total () - 1, чтобы не совпадало с количеством нейронов в следующем слое.

 
Ping You Jiang #:

Здравствуйте, первый раз изучаю нейронные сети, ваша статья мне очень подходит, но я хочу знать, почему во многих местах нужно -1, например: nextLayer. () - 1, чтобы не совпадало с количеством нейронов в следующем слое.

Привет, это нормальная работа с массивом. В mql5 все индексы массивов начинаются с 0. И nextLayer.Total() возвращает общее количество нейронов. Так что если оно равно 10, это означает. элементы массива имеют индексы от 0 до 9.

 

При загрузке файла я получаю ошибку компиляции.

NeuroNet.mqh

 
Muhammad Saleem #: При загрузке файла я получаю ошибку компиляции.

Попробуйте использовать функцию GetPointer.

 
Dmitriy Gizlyk #: Попробуйте использовать функцию GetPointer.

Здравствуйте Дмитрий, спасибо за эту статью. Подскажите, пожалуйста, как можно исправить эту ошибку? Не могли бы вы предоставить исправленный код?

 
Muhammad Saleem #: При загрузке файла я получаю ошибку компиляции.

Привет, Мухаммад, удалось ли вам исправить эту ошибку?