Читать книгу «Нейросетевое программирование. Инструментарий нейрокомпьютинга» онлайн полностью📖 — Александра Кириченко — MyBook.
image

Подробное знакомство с нейросетью

Подробное знакомство с тем, что представляют собой и что можно делать с нейронными сетями, можно получить по справочнику команд (Command Reference), в котором перечислены все доступные специфичные для MemBrain команды языка сценариев MemBrain в соответствии со следующими подкатегориями:

Команды языка сценариев MemBrain


В этих разделах можно познакомиться с такими командами, как:

//Открыть файл MemBrain net (*.mbn)

[void OpenNet (постоянная строка & в файле fileName)]

//Сохранить текущую сеть MemBrain в файл (*.mbn)

[void SaveNet (const string &in fileName)]

//Получить имя файла текущей загруженной сети

[void GetCurrentNetFileName (string& out fileName)]

//Экспорт текущей сети MemBrain в CSV-файл

[void ExportNet (const string &in fileName)]

//Получить количество входных нейронов в сети

[uint GetInputCount ()]

//Получить количество выходных нейронов в сети

[uint GetOutputCount ()]

//Получить имя входного нейрона

[bool GetInputName (uint inNeuronNum, string &out name)]

//Получить имя выходного нейрона

[bool GetOutputName (uint outNeuronNum, string &out name)]

//Получить текущую активацию выходного нейрона

[bool GetOutputAct (uint outNeuronNum, double &out activation)]

// Получить свойства выбранного в настоящее время нейрона

bool GetSelectedNeuronProp (SNeuronProp &out prop)

// Установите свойства всех выбранных в настоящее время нейронов

void SetSelectedNeuronProp (SNeuronProp &in prop)

// prop – Структура данных SLinkProp для считывания параметров ссылки:


Рис.23 Веса нейронов


//По команде ViewSetting (EViewSetting setting, bool on) можно получить подробную информацию о конструктивных особенностях нейросети:


Рис.24 Конструктивные особенности нейросети


Разобравшись в технологии создания скрипта, используемой системе команд, получив необходимую информацию о составе, структуре, устройстве нейросети, можно модернизировать нейросетевую конструкцию, программно корректировать свойства нейросетей

Управление проведением нейросетевых исследований с помощью «Зажигания нейронов»

MemBrain разрешает использовать нейроны для управления выполнением различных действий с нейросетями и различными конструкциями компьютера.

Любой нейрон нейросети может быть объявлен «Управляющим». Управляющий нейрон может быт «зажжён» (Fire). Смысл термина «огонь» (Fire) заключается в том, что выход нейрона (его активация) принимает значение <> 0.

Запуск нейрона разрешается следующими параметрами, которые являются свойствами (Properties) каждого нейрона:

• Нижний порог огня (Threshold)

• Верхний порог огня (Upper Threshold)

• Выбор уровня выходного сигнала («1» или «Активация»)

• Время восстановления выхода (The Output Recovery Time)

Если активация нейрона меньше или равна нижнему порогу огня, то нейрон не будет срабатывать в любом случае.

Решение о том, зажигается ли нейрон (выход <> 0) или нет (выход = 0), принимается на основе вероятности запуска, которая возрастает от 0 до 1 с активацией в диапазоне от нижнего порога огня к верхнему порогу огня.

Когда нейрон срабатывает, он может дополнительно запустить исполняемый или пакетный файл. Чтобы быть более точным, файл может быть указан Windows для открытия независимо от его типа. Это также может быть документ, который связан с определенным приложением в Windows.

Чтобы указать файл, который должен открываться при зажигании нейрона, выберите один или несколько нейронов, а затем выберите «Дополнительно»> «Исполняемый файл при запуске…» (<Extras> <Executable When Firing…>) в главном меню или в контекстном меню, которое появляется при щелчке правой кнопкой мыши на одном из выбранных нейронов.

Появится следующий диалог:


Рис.25 Настройка зажигаемого файла


Обратите внимание на флажок с именем <Открыть файл при стрельбе> (Open File when Firing). Если этот флажок установлен, информация ниже актуальна.

Помните, что нужно установить display neuron fire indicators (индикаторы огня нейрона) для того, чтобы визуализировать момент зажигания нейрона.

Путь и имя файла, который должен быть открыт, а также аргумент командной строки хранятся с каждым нейроном отдельно. Таким образом, вы можете указать разные файлы, которые будут открыты для каждого нейрона. Обратите внимание, что вы можете отображать на экране индикаторы огня нейронов, чтобы визуализировать их работу.

Если активированы настройки дисплея <Вид> <Показать индикаторы огня> (<View> <Show Links>), то нейроны показывают желтую точку на своем выходном разъеме каждый раз, когда они запускаются (выдают сигнал <> 0). На следующем рисунке показан нейрон, который в данный момент работает. На первом рисунке опция <Вид> <Показать ссылки> деактивирована, поэтому входной разъем не отображается. Второе изображение – это результат отображения, если опция активирована.


Рис.26 Индикация зажигаемого нейрона

Пример: Нейросетевой преобразователь последовательного кода в параллельный

В книге «Конструирование искусственных нейронных ансамблей (ИНА).pdf» [38] был представлен преобразователь последовательного кода в параллельный, состоявший из трёх групп нейронов: входных, выходных и нейронов задержки. В состав преобразователя был включён нейрон In1, который практически не использовался. Назначение и принцип действия этиго нейрона было обещано рассмотреть при описании скриптов пакета MemBrain.

Основное назначение этого нейрона (In1): управление работой нейроконструкции.

Для демонстрации управляющих функций нейрона восстанавливаем в основном окне MemBrain преобразователь последовательного кода в параллельный с помощью программы «СдРег. mbn» [10]:


Рис.27 Схема преобразователя последовательного кода в параллельный


Анализ созданной нейросети показывает:


Рис.28 Характеристики нейросети


всего нейронов – 15. Из них: 2 входных, 7 выходных, 6 скрытых нейронов (1 DLY 2 – 1 DLY 7) в 6 скрытых слоях (H1 – H6).

Для демонстрации работы преобразователя кодов было предусмотрено два файла.

В первом файле (SdvReg0.csv) нейрон In1 всегда равен 0. По In2 поступают последовательные сигналы, накапливающиеся в параллельные группы по 7 сигналов.


Рис.29 Основной файл для проверки преобразователя кодов


Используем этот файл для обучения:


Рис.30 Ход обучения преобразователя кодов


Ошибка обучения имеет достаточно малую величину и показывает, что нейросеть постепенно приблизилась к правильному результату (это видно по голубой линии. на Pattern Error Viewer):


Рис.31 Процесс обучения нейросети


После 6 точки голубая линия совпадает с Target. По клавише Export Graph выводится исполненный пример после обучения:


Рис.32 Максимальное количество колонок


Здесь содержится предупреждение о структуре выводимой информации.

Содержимое файла «SdvReg00.csv», полученного по клавише Export Graph:


Рис.33 Правильный результат после обучения.


Файл SdvReg2.csv имеет другое строение:

Нейрон In1 может исполнять разные функции: он может сигнализировать момент окончания превращения последовательного кода в параллельный и включать перепись сформированного параллельного кода с выходных нейронов в ячейку памяти для накопления. Если In1 отмечает момент, когда закончено формирование одной строки параллельного кода, то по сигналу In1=1 полученный код нужно считать с выходных нейронов нейросети. При исполнении такого действия нужно будет сформировать и вывести только одно число 1111000 (см. рисунок 34).

Но может быть In1=1 и сигналом, запускающим сохранение в памяти в виде csv-кода исполняемого (текущего) фрагмента обучающей выборки MemBrain. Тогда выводиться должно будет не одно число, а ряд чисел, составляющих текущую обучающую последовательность. Разница – в программах, которые будут работать по зажиганию нейрона In1.


In2 фиксирует символы поступающего последовательного кода.

Для демонстрации процесса зажигания управляющего нейрона подготовлен новый файл: 090720.csv:


Рис.34 Файл, вызывающий зажигание нейрона In1


После загрузки этого файла выведем на экран одновременно часть нейросети с нейроном In1 и часть редактора уроков Lesson Editor, содержащую нейрон In1. До тех пор, пока In1 = 0, нейрон не зажигается (это видно по выходному порту этого нейрона. Одновременно в редакторе уроков видно, что нейрон In1=0):


Рис.35 Нейрон In1 не зажжён


Как только In1 стал 1, нейрон зажёгся и начал работать…


Рис.36 Нейрон In1 зажёгся


В нашем случае по команде из программы «230620.as» выводится весь последний пример, а не одна строка. Нейрон In1 = 1 будем использовать как команду считать в csv-файл содержимое выполненного примера. Считывание это должно производиться по команде ExportLessonRaw раздела LessonEditor, которая записана в скрипте «230620.as».

Программа «230620.as» :

void main ()

{

SelectLesson (3);

ExportLessonRaw(C:\ProgramData\MemBrain\”230620-3.as»);

}


Последовательность запуска управляющего нейрона:

– Включить View -> «Show Fire Indicator».

– Средствами Windows записать в ячейку «SdvReg_111.csv» ноль.

Активизировать запуск программы при появлении огня (Fire):

– Пометить нейрон In1 на графической схеме нейросети свойством (Properties) «Executable When Firing» или: через Extras -> Executable when Firing.

– Заполнить диалог:


Рис.38 Выполняемая программа при зажигании нейрона


– Нажать «Think on Lesson» на Lesson Editor.

Lesson Editor настроен на запись по скриптовой команде из файла ”230620-3.as” в 3 урок:


Рис.39 Вывод результата из 3 урока


Выводим из 3 урока информацию в файл SdvReg_111.csv.

На экране появляется:


Рис.40 Выводимая информация


В результате срабатывания управляющего нейрона In1, в файл SdvReg_111.csv выведена информация из 3 урока.


Таким образом:

В демонстрационной папке этого примера должно содержаться:


Рис.41 Содержимое папки, необходимое для зажигания нейрона

Интерфейс пользователя

Перевод раздела справочника команд нейропакета «Communication with the user».


Раздел содержит 7 команд:

1. Команда «void MessageBox (const string &in message)» выводит простое окно сообщения с кнопкой ОК. Сообщение содержит текст, который будет отображаться в выводимом окне. Выполнение сценария останавливается до тех пор, пока пользователь не нажмет кнопку ОК, которая автоматически закрывает окно сообщения.

2. Команда «EDlgRet MessageBox (const string &in message, EMsgBoxType type)» выводит окно сообщения с несколькими различными кнопками. Варианты используемых кнопок:

MB_OK – просто кнопка ОК

MB_OKCANCEL – кнопка ОК и ОТМЕНА

MB_YESNO – кнопки ДА и НЕТ

MB_YESNOCANCEL – ДА, НЕТ и кнопка ОТМЕНА

MB_RETRYCANCEL – кнопки RETRY и CANCEL

MB_ABORTRETRYIGNORE – кнопки ABORT, RETRY и IGNOR

Команда возвращает информацию о том, какую кнопку в окне сообщения нажал пользователь. Выполнение сценария останавливается до тех пор, пока пользователь не нажмет одну из кнопок, которая автоматически закрывает окно сообщения.

3. Команда, содержащая просьбу ввести значение имеет три версии, которые поддерживают типы данных «double», «string» и «int». Все три версии ведут себя одинаково:

EDlgRet UserInput (const string &in explanation, double &in initValue, double &out userValue)

EDlgRet UserInput (const string &in explanation, int &in initValue, int &out userValue),

EDlgRet UserInput (const string &in explanation, const string &in initValue, string &out userValue),

Где InitValue указывает начальное значение в поле ввода данных,

userValue – переменная, которая получила фактический пользовательский ввод.

Команда содержит текст, объясняющий, тип данных, которые должны быть введены и каково их значение. Выполнение сценария останавливается до тех пор, пока пользователь не нажмет одну из кнопок, которая автоматически закрывает диалоговое окно. Главное – это то, что команда возвращает информацию о том, какую кнопку в диалоговом окне пользовательского ввода нажал пользователь: всегда одно из двух значений: IDOK или IDCANCEL

4. Диалоговое окно для выбора файла вызывается командой

«EDlgRet FileOpenDlg (const string &in title, const string &in extension, const string &in fileNameInit, string &out fileName)».

 
В title указывается заголовок для отображения в диалоге.
Extension определяет расширение по умолчанию, которое будет использоваться для просмотра файлов в диалоговом окне. Например, строка расширения «txt» устанавливает фильтрацию файлов для всех файлов с расширением «txt».
Укажите «*» или просто «» (то есть пустую строку), если вы не хотите устанавливать фильтр файлов. Диалог в этом случае просматривает все типы файлов (*. *).
В fileNameInit можно указать начальное имя файла для отображения в диалоговом окне. Укажите «», если вы не хотите указывать начальное имя файла.
FileName содержит имя файла, полное имя файла (включая путь), которое выбрал пользователь.
Команда возвращает информацию о том, какую кнопку в диалоговом окне пользовательского ввода нажал пользователь: всегда одно из следующего, которое соответствует непосредственно нажатой кнопке: IDOK или IDCANCEL. Выполнение сценария останавливается до тех пор, пока пользователь не нажмет одну из кнопок, которая автоматически закрывает диалоговое окно.
 

5. Команда «Открыть диалоговое окно выбора файла для выбора файла для сохранения:

«EDlgRet FileSaveDlg (const string &in title, const string &in extension, const string &in fileNameInit, string &out fileName)».

6. Команда «Показать / скрыть окно трассировки сценариев:

«void ShowTraceWin (bool show)».

При этом, show – «true» показывает окно трассировки, «false» скрывает его. Сценарий может помещать текстовые сообщения в окно трассировки с помощью команды сценария «Трассировка (…)».

7. Вывести текстовую строку в окно трассировки сценариев:

«void Trace (const string &in text)».

 
Здесь text – текст для вывода в окно трассировки. Добавьте «\ r \ n» к тексту, если вы хотите, чтобы следующий текст был добавлен к новой строке в окне трассировки. Если окно трассировки никогда не отображалось с момента запуска MemBrain, оно будет показано автоматически при выполнении этой команды. Однако, когда окно трассировки закрыто пользователем, оно не будет отображаться автоматически!
 

Автоматизация создания нейросети с помощью группы скриптов NetEditor с автоматической прорисовкой схемы нейросети на экране

Для создания сети используются тексты следующих скриптов:

// UsingNetEditorExample.as

// NetEditor.as

// Position.as

Создание сети ведётся под управлением пользователя. После запуска скриптовой программы для связи с пользователем используется интерфейс – пользователю задаётся вопрос о характеристиках создаваемой нейросети:

Введите количество скрытых слоёв в нейросети (Pleas enter the number of hidden layers for the net) и предлагается вариант ответа: 2;

Рис.42 Количество скрытых слоёв


Соглашаемся на 2

Следующим задаётся вопрос: хотите использовать для создания нейросети файл, содержащий готовые уроки MemBrain? (Да, или Нет)


Рис.43 Будет ли использоваться mbl-файл


Да

Если есть готовый файл с уроками (файл в формате mbl), надо указать координаты этого файла. По содержимому файла определяется количество входных и выходных нейронов и начинается создание сети: появляется окно скрипта:


Рис.44 Окно скрипта с извещением о создании нейросети


На экране появляются фрагменты создаваемой нейросети:


Рис.45 Выводимые на экран сообщения о создании нейросети


И задаётся вопрос, какое количество нейронов должен содержать скрытый слой №1?


Рис.46 Количество нейронов в скрытом слое 1


Подсказывается вариант ответа (5). При ответе Да задаётся

вопрос о количестве нейронов в скрытом слое 2.


Рис.47 Количество нейронов в скрытом слое 2


При ответе Да завершается построение нейросети, о чём сообщается в трассе скрипта:


Рис.48 Часть трассы о завершении скрипта


Трасса в один кадр не умещается:


Рис.49 Часть трассы о завершении скрипта


На экран выводится готовая нейросеть.


Рис.50 Нейросеть создана


В том случае, если не используем mbl-файл, запрашивается количество входных нейронов:


Рис.51 Количество входных нейронов


Да. Затем запрашивается количество выходных нейронов: