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

Практика нейронных сетей. Урок 10. Введение в многослойную нейросеть

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

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


Исходники к уроку можно скачать В платном разделе.

До сих пор мы занимались однослойными нейронным сетями, к тому же, состоящими из одного единственного нейрона. У таких сетей есть ряд ограничений, в частности, они могу решать только линейно-сепарабельные задачи (см. урок Теория нейронных сетей. Урок 4. Обучение нейрости. Линейный персептрон). Тоесть, однослойную нейросеть можно, например, научить выполнять функцию "И" либо "ИЛИ" но нельзя научить выполнять функцию "Исключающее ИЛИ". Давайте проверим это на практике...

...

...Далее, делаем обработчики кнопочек.

Функция И

        private void btnStudyAnd_Click(object sender, EventArgs e)

        {

            matrix.Clear();

            add_to_matrix(0, 0, 0);

            add_to_matrix(0, 0, 1);

            add_to_matrix(0, 1, 0);

            add_to_matrix(1, 1, 1);

            study();

        }

...

...Ну и реализация кнопочки "Проверить":

        private void btnTest_Click(object sender, EventArgs e)

        {

            neuron.inputs[0] = Convert.ToDouble(nudIn1.Value);

            neuron.inputs[1] = Convert.ToDouble(nudIn2.Value);

            neuron.compute();

            MessageBox.Show(neuron.output.ToString());

        }

Теперь мы можем убедиться в том, что однонейронная нейросеть может обучиться распознавать функции "И", а так же "ИЛИ":

Практика нейронных сетей. Урок 10. Введение в многослойную нейросеть

А вот при попытке обучить нейрон для вычисления исключающего ИЛИ заканчивается эпик фэйлом:

Практика нейронных сетей. Урок 10. Введение в многослойную нейросеть

Что еще раз доказывает, что однослойную сеть невозможно обучить линейно НЕ сепарабельным задачам. Но выход есть. ...

...

...Теперь давайте все это запрограммируем. Начнем с класса, реализующего слой нейросети - Layer:

    /// <summary>

    /// Слой нейронной сети

    /// </summary>

    public class Layer

    {

        /// <summary>

        /// Нейроны слоя

        /// </summary>

        public List<Neuron> neurons;

 

        public Layer()

        {

            neurons = new List<Neuron>();

        }

 

        /// <summary>

        /// Рассчитать слой

        /// </summary>

        public void compute()

        {

            foreach (Neuron neuron in neurons) neuron.compute();

            foreach (Neuron neuron in neurons) neuron.send_signals();

        }

 

        /// <summary>

        /// Обучение слоя

        /// </summary>

        /// <param name="t">Желаемая реакция</param>

        /// <param name="a_inputs">Входной вектор</param>

        public void study(double t, List<double> a_inputs)

        {

            foreach (Neuron neuron in neurons) neuron.study(t, a_inputs);

        }

    }

Обратите внимание...

....

...Программа действительно выдает правильный результат:

Практика нейронных сетей. Урок 10. Введение в многослойную нейросеть

И так, подведем итоги. Мы наглядно показали, что однослойные нейронные сети не справляются с задачами, которые не являются линейносепарабельными. Эту проблема решатся за счет введение дополнительных нейроннных слоев.

 
« След.   Пред. »
 
© 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 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше