Создание и обучение нейронной сети

Цель работы:

  • Приобрести первичные навыки работы в SimInTech для изучения возможности работы библиотеки "xref keyref="BLOCKLIB_nejronnye_seti/BLOCKLIB_nejronnye_seti">Нейронные сети".

Задачи работы:

Краткое описание работы в SimInTech

В данной лабораторной работе представлен пример решения задачи распознавания рукописных цифр с помощью машинного обучения (нейронных сетей). Для формирования нейронной сети необходимо воспользоваться библиотекой «Нейронные сети».

При решении задачи распознавания изображения обычно используется свёртка входных данных, что усложняет структуру нейронной сети. Для данной задачи будет использоваться простой однослойный персептрон, поскольку на вход нейросети будет поступать бинарный массив с размерностью равной «784».

Описание расчетной схемы библиотеки «Нейронные сети» в SimInTech

Расчетная схема представляет собой направленный граф из блоков библиотеки «Нейронные сети», соединенных собой линиями связи. Блоки представляют собой расчетные слои нейронной сети, а линии связи позволяют настроить структуру синапсов нейронной сети.

Расчетная схема непосредственно нейронной сети всегда должна начинаться с блока «НС – Входной слой» - в нем пользователь формирует тензор исходных данных формата (Ширина, Высота, Глубина). На каждом шаге расчета блок «НС – Входной слой» будет делить поток исходных данных на тензоры заданного формата и пропускать их в расчетную схему массивом размерности:

В блоке «НС – Входной слой» настраиваются имена файлов для сохранения и загрузки архитектуры и весов синапсов нейронной сети.

Блоками, которые следуют за блоком «НС – Входной слой», могут являться любые блоки библиотеки «Нейронные сети». Настраивая их свойства, пользователь автоматически настраивает следующий слой расчетной схемы, а также формирует синапсы. SimInTech автоматически связывает все нейроны предыдущего слоя со всеми нейронами следующего – визуально это представляет собой линию связи на схеме. По данным линиям связи передаются не сами значения сигналов, а свойства для подключения следующего слоя к предыдущему. Таким образом в SimInTech отслеживать значения сигналов в середине нейронной сети невозможно.

Расчетная схема непосредственно нейронной сети всегда должна заканчиваться блоком «НС – Выходной слой» - в нем пользователь настраивает последний расчетный слой сети и выбирает функцию потерь для обучения нейронной сети в режиме обучения.

Блок «НС – Режим работы» подключается после блока «НС-Выходной слой» и позволяет выбрать пользователю один из режимов работы нейронной сети: «Обучение», «Сравнение», «Определение». На порты выхода данного блока могут передаваться как данные для анализа точности обучения нейронной сети, так и непосредственно выходы расчетной схемы (результаты моделирования).

Обучение нейронной сети

Для формирования проекта и обучения новой нейронной сети необходимо нажать на кнопку «Новый проект» и выбрать пункт «Схема модели общего вида», откроется новое окно проекта. Поместить в окно проекта блоки «НС-Исходные данные», «НС-Входной слой», «НС-Полносвязный слой», «НС-Выходной слой» и «НС-Режим работы» из вкладки «Нейронные сети» и блок «Временной график» из вкладки «Вывод данных». Соединить линии связи согласно рисунку (Рисунок 1).

Рисунок 1. Нейронная сеть для обучения.

В свойствах блока «НС-Исходные данные» задать свойства согласно рисунку (Рисунок 2).

Блок «НС-Исходные данные» используется для классических тестовых задач и включает в себя только семь обучающих и тестовых выборок. При необходимости использования собственной обучающей выборки, необходимо самостоятельно сформировать блок для ввода исходных данных.

Обратите внимание, что данные для обучения нейронной сети и метки находятся в папке «data», которая находится в одном каталоге с проектом. Данные файлы можно найти в папке SimInTech (по умолчанию «C:\SimInTech\Demo\Нейронные сети\Распознавание рукописных цифр\data»).

Рисунок 2. Свойства блока «НС-Исходные данные».

В свойствах блока «НС-Входной слой» задать свойства согласно рисунку (Рисунок 3).

Обратите внимание, что в свойствах «Файл весов» и «Файл сети» указывается путь и имя файлов, в которые будет сохраняться данные о нейронной сети. Имя и путь могут быть произвольными.

Рисунок 3. Свойства блока «НС-Входной слой».

В свойствах блока «НС-Полносвязный слой» задать свойства согласно рисунку (Рисунок 4).

Рисунок 4. Свойства блока «НС-Полносвязный слой».

В свойствах блока «НС-Выходной слой» задать свойства согласно рисунку (Рисунок 5).

Рисунок 5. Свойства блока «НС-Выходной слой».

В свойствах блока «НС-Режим работы» задать свойства согласно рисунку (Рисунок 6).

Рисунок 6. Свойства блока «НС-Режим работы».

Запустить проект на расчёт. Двойным нажатием по блоку «Временной график» открыть график точности обучения нейронной сети (Рисунок 7). График принял такой вид, поскольку при обучении на вход нейросети поступал только один обучающий элемент, при этом вероятность нахождения правильного ответа составляет либо ноль, либо единицу. Чем дольше будет происходит обучение, тем точнее будет расчёт нейронной сети.

Рисунок 7. График обучения нейронной сети при одном входном сигнале.

Для увеличения скорости обучения нейронной сети необходимо организовать пакетное обучение, то есть подавать на вход сети не одно исходное изображение, а несколько. Для этого нужно в свойствах блока «НС-Режим работы» задать значение свойства «Количество данных» равным «1000».

Запустить проект на расчёт. График точности обучения нейронной сети примет вид согласно рисунку (Рисунок 8). Таким образом, подавая на вход нейросети вектор из тысячи значений можно точнее отслеживать динамику обучения нейронной сети.

Рисунок 8. График обучения нейронной сети при тысячи входных сигналов.

Тестирование обученной нейронной сети

Поскольку веса синапсов уже сохранены в отдельный файл, то для тестирования необходимо создать новую нейронную сеть, подобную предыдущей, и настроить её под уже готовые веса. Для формирования проекта и настройки новой нейронной сети нужно нажать на кнопку «Новый проект» и выбрать пункт «Схема модели общего вида», откроется новое окно проекта. Поместить в окно проекта блоки «НС-Исходные данные», «НС-Входной слой», «НС-Полносвязный слой», «НС-Выходной слой», «НС-MNIST to PX» и два блока «НС-Режим работы» из вкладки «Нейронные сети», блок «Среднее арифметическое» из вкладки «Статистика», два блока «Константа» из вкладки «Источники», а так же блоки «Временной график» и «Вывод изображения с линии связи» из вкладки «Вывод данных». Соединить линии связи согласно рисунку (Рисунок 9).

Рисунок 9. Нейронная сеть для тестирования.

Для индикации рассчитанного значения нужно нажать правой кнопкой мыши по линии связи исходящей из верхнего выхода блока с подписью «Определение» и выбрать пункт «Свойства объекта». Выделить свойство «Значение» и нажать кнопку «Создать подписи» (Рисунок 10).

Рисунок 10. Свойства линии связи.

В открывшемся окне можно изменить отображаемые значения. При нажатии на кнопку «Ok» в окне проекта появится примитив «Текст» в котором отображается значение с выбранной линии связи.

В свойствах блока «НС-Исходные данные» задать свойства согласно рисунку (Рисунок 11).

Рисунок 11. Свойства блока «НС-Исходные данные».

В свойствах блока «НС-Входной слой» задать свойства согласно рисунку (Рисунок 12). Поскольку используются веса уже готовой нейронной сети, необходимо включить свойство «Использовать сеть из JSON», а также задать в свойстве «Файл загрузки весов» путь к файлу, сохранённому при обучении нейронной сети.

Рисунок 12. Свойства блока «НС-Входной слой».

В свойствах блока «НС-Полносвязный слой» задать свойства согласно рисунку (Рисунок 13).

Рисунок 13. Свойства блока «НС-Полносвязный слой».

В свойствах блока «НС-Выходной слой» задать свойства согласно рисунку (Рисунок 14).

Рисунок 14. Свойства блока «НС-Выходной слой».

В свойствах блока «НС-Режим работы» с подписью «Определение» задать свойства согласно рисунку (Рисунок 15).

Рисунок 15. Свойства блока с подписью «Определение».

В свойствах блока «НС-Режим работы» с подписью «Тестирование» задать свойства согласно рисунку (Рисунок 16).

Рисунок 16. Свойства блока с подписью «Тестирование».

В свойствах блока «Среднее арифметическое» задать свойства согласно рисунку (Рисунок 17).

Рисунок 17. Свойства блока «Среднее арифметическое».

В свойствах блока «НС-MNISTtoPX» задать свойства согласно рисунку (Рисунок 18).

Рисунок 18. Свойства блока «НС-MNIST to PX».

Поскольку размер входного изображения равен «784», задать значение блоков «Константа» равным «28». Для графического оформления проекта возможно произвести настройку блоков «Изображение с линий связи» и «Временной график».

Запустить проект на расчёт. График точности обучения нейронной сети примет вид согласно рисунку (Рисунок 19). Таким образом на графике отображается средняя точность определения входного значения.

Рисунок 19. График точности нейронной сети.

При расчёте в блоке «Вывод изображения с линий связи» отображается графическое изображение входного сигнала. При двойном нажатии на линию связи исходящую из верхнего выходного порта блока с подписью «Определение» откроется окно с рассчитанным значением (Рисунок 20). Таким образом можно наглядно следить за точностью работы нейронной сети.

Рисунок 20. Нейронная сеть в режиме тестирования.