.
Практика нейронных сетей. Урок 20. Исследование ИНС. Продолжение
Автор 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 г. )