Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Искусственный интеллект arrow Практика нейронных сетей (платный раздел) arrow Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение
18.12.2018 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение Печать E-mail
Автор megabax   
23.11.2016 г.
unit AIObj

Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


На прошлом уроке мы столкнулись с тем, что нейрон мог в принципе обучиться, но не обучился. Сейчас будем разбираться, почему. Для начала нам надо как-то зафиксировать данную ситуацию, когда так происходит. Для этого придется сохранить саму эту случайную выборку, а также сами веса нейронов. ЛУчше всего сохранять сам нейрон и выборку в одном блоке. Поэтому у класса Neuron добавим признак сериализации (атрибут  Serializable):

    /// <summary>

    /// Класс нейрона

    /// </summary>

    [Serializable]

    public class Neuron

    {

...

...

Для объединения нейрона и выборки создадим класс NeuronInfo:

    /// <summary>

    /// Информация нейроны + обучающая выборка

    /// </summary>

    [Serializable]

    public class NeuronInfo

    {

        /// <summary>

        /// Данные для обучения и тестирования нейрона

        /// </summary>

        public List<StudyMatrixItem> data;

 

        /// <summary>

        /// Нейрон

        /// </summary>

        public Neuron neuron;

 

        public NeuronInfo()

        {

            data = new List<StudyMatrixItem>();

            neuron = new Neuron(2, new Threshold(), false);

            neuron.mu = 0.3;

        }

 

    }

...

...

И теперь мы видим, что для полной выборки нейрон оказался необучаем (то есть, нет областей с нулевым значением ошибки):

Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение

Возникает вопрос: как же так? У нас же данные линейно сепарабельные!

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

Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение

И внесем небольшое изменение в процедуру построения карты (вставим одну строчку, выделено маркером):

        private void btnErrorMapFull_Click(object sender, EventArgs e)

        {

            (info.neuron.trans as Threshold).level = Convert.ToDouble(nudThreshold.Value);

           

            int size = 300;

            double[,] map = new double[size, size];

            double range = 100;

...

...

И вуаля, в области отрицательных значений порога появляются зоны обучения:

Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение

Делая порог еще более отрицательным, мы можем расширить нулевую зону:

Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение

Так что теперь мы можем исправить функцию обучения нейрона, добавив туда также обучение порога:...


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft.. 


Последнее обновление ( 23.11.2016 г. )
 
« След.   Пред. »
 
© 2018 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше