Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Практика нейронных сетей (платный раздел) arrow Практика нейронных сетей. Урок 10. Введение в многослойную нейросеть
08.10.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
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. Введение в многослойную нейросеть

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

 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги