Пишем биржевого робота на C#. Урок 2. Нейросеть |
Автор megabax | |||
23.09.2011 г. | |||
Пишем биржевого робота на C#. Урок 2. НейросетьЧто бы смотреть урок полностью, подпишитесь на платный раздел. В платном разделе статья находиться здесь. Исходники к уроку можно скачать в платном разделе. Сегодня мы рассмотрим библиотеку для создания нейронной сети, которая разработана в рамка проекта "Генетический алгоритм". На основе этой нейросети мы и будем постепенно строить робота. Прежде чем перейти к рассмотрению тестового примера ("Редактор нейросети версия 1.1") я перечислю модули библиотеки и их назначение.. ... ... Если мы запустим тестовый пример (скачать exe-шник можно здесь) то увидим вот такое окно: По умолчанию у нас добавлена одна нейросеть ("сеть 0"): Мы можем добавить еще нейросети: после чего нейросетей будет несколько: Добавление нейросети реализовано следующим образом... ...
.. Так же мы можем загрузить нейросеть из файла:
при этом добавленная нейросеть добавляется в конец списка:
Вот как реализовано добавление нейросети из файла...
Тоесть, мы просто читаем нейросеть из файла, а потом добавляем ее в набор. Возможность сохранить и прочитать нейросеть через BinaryFormatter существует благодаря тому, что класс нейросети объявлен как сериализуемый:
Так как сеть можно добавить из файла, то ее можно и сохранить в файл:
Сохраняется нейросеть так же через BinaryFormatter...
...
После добавления слоя к нему нужно добавить элементы:
Для того, что бы добавить к слою элемент(нейрон), нужно сначала получить его (метод класса нейросети GetLayer), затем вызвать у онного метод AddEntity...
...
... Совокупность слоев и элементов образуют нейросеть:
числами отображаются значения на выходе нейрона (нулевой слой - это "рецепторы", входные нейроны. У нейронов первого слоя мы может устанавливать значения:
У нейронов последующих слоев мы не можем установить значения, они вычисляемые:
но зато у нейрона можно менять агрегатную и передаточную функцию, а так же нижний и верхний пороги (для передаточной функции типа "персептрон"). Что такое персептрон, агрегатная и передаточные функции, рассмотрим немного ниже. А сейчас познакомился с понятием синапса. Потому что именно через синапсы задаются связи между нейронами и весовые коэффициенты. Синапсы добавляются, редактируются и удаляются через меню "Синапсы":
Давайте создадим сеть с двумя входами и одним нейроном на выходном слое (как на рисунке). Добавим к последнему два синапса (по одному для каждого входа). при добавлении синапса у нас выйдет диалог, в котором мы укажем, с какого входа идет сигнал и каков его весовой коэффициент:
Добавленные синапсы у нас отобразятся в таблице справа:
Теперь попробуем рассчитать нейросеть. На выходе у нас должно получиться 11 (1*3+2*4=11):
Теперь попробуем сменить агрегатор, например, поставив максимум:
Теперь мы получим результат 8 (максимум из 1*3 и 2*4). Что касается передаточной функции. Пока их реализовано два вида: "как есть" и "персептрон". Первую вы уже испробовали. Давайте займемся второй. У нас при этом программа запросит ввести пороговые значения:
Если мы сейчас рассчитаем сеть, то получим результат нуль: значение вычисления между пороговыми значения. Если оно будет ниже нижнего порога, то -1, выше верхнего +1.
Рассчитать можно не только нейросеть, но и весь пакет нейросетей, только сначала нужно настроить связи между нейросетями:
Порядок расчета нейросетей в пакете задается по кнопочке "порядок":
Теперь поговорим об агрегаторах. Все агрегаторы объявлены от абстрактного класса SynapsesAggregator...
....
...Если вы разработали какой либо новый агретор, то его нужно давить в процедуру static SynapsesAggregator(), например, вот так...
....
... Давайте проверим:
Передаточная функция реализуется в пространстве имен NeuronTransferFunctions...
...
... Теперь можно тестировать изменения в программе:
Исходники к уроку можно скачать в платном разделе.
* Скриншоты, помеченные данным знаком, являются цитатами и иллюстрациями программного продукта "Microsoft Visaul Studio 2010", авторское право на который принадлежит "Microsoft". |
|||
Последнее обновление ( 10.01.2013 г. ) |
« След. | Пред. » |
---|