Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Практика нейронных сетей (платный раздел) arrow Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение
15.12.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
Я принимаю Яндекс.Деньги