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


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