Читать книгу Нейросетевое программирование. Инструментарий нейрокомпьютинга - Александр Кириченко - Страница 7
Инструментарий нейрокомпьютинга
Интерфейс пользователя
ОглавлениеПеревод раздела справочника команд нейропакета «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 Количество входных нейронов
Да. Затем запрашивается количество выходных нейронов:
Рис.52 Количество выходных нейронов
Допустим, определяем это количество цифрой 3, затем запрашивается количество нейронов в каждом скрытом слое
Рис.53 Запрос количества слоёв в скрытом слое 1
На этот вопрос ответ – 4. Появляется следующий вопрос о количестве нейронов в скрытом слое №2:
Рис.54 Запрос количества слоёв в скрытом слое 2
Ответ на этот вопрос – 7
Выводится трасса скрипта
Рис.55 Трасса скрипта
Трасса в один кадр не умещается:
Рис.56 Второе сообщение о трассе скрипта
На экране остаётся схема созданной нейросети:
Рис.57 Схема созданной нейросети
Естественно, по умолчанию устанавливаются типовые свойства всех нейронов.
Начинается работа этой скриптовой группы с «Using Net Editor Example… as». Затем по мере необходимости к нему подключаются ещё два скрипта.
В начале скрипта «Using Net Editor Example… as» содержится раздел «Константы», определяющий значения наиболее важных параметров создаваемой нейросети с помощью команды const. Затем создаётся список глобальных переменных, уточняются параметры создаваемой нейросети, после чего начинается сборка нейросети..
При необходимости выяснить количество скрытых слоёв в создаваемой нейросети проводится следующий диалог:
// Determine how many normal hidden layers there shall be in the net
void DetermineHidLayerCount ()
{
int count;
if (UserInput («Please enter the number of hidden layers for the net.»,
DEFAULT_HID_LAYER_COUNT, count) == IDOK)
{
if (count> gMaxHidLayerCount)
{
MessageBox («Too many hidden layers!»);
AbortScript ();
}
// Success. Adjust the size of the hidden layer array now.
gHidLayers.resize (count);
}
else
{
AbortScript ();
}
}
Создание входных нейронов по данным, содержащимся в mbl-файле
// Create the I/O neurons of the net using a MemBrain lesson file
void CreateIOFromMbl ()
{
string lessonFileName;
if (FileOpenDlg («Select Lesson File», «mbl», «», lessonFileName) == IDOK)
{
// Load the lesson into #1 (delete all other lessons)
SetLessonCount (1);
LoadLesson (lessonFileName);
gInputCount = GetLessonInputCount ();
gOutputCount = GetLessonOutputCount ();
if (gInputCount> gMaxCountPerLayer)
{
MessageBox («Too many input columns in lesson!»);
AbortScript ();
}
else if (gOutputCount> gMaxCountPerLayer)
{
MessageBox («Too many output columns in lesson!»);
AbortScript ();
}
// Now we tell the editor to actually create the input and output neurons.
// The number of hidden layers is required here to leave space for them.
Это пример дискуссии с компьютером о способе создания базового компьютера с использованием mbl-файла
// Create net based on lesson or manual input?
if (MessageBox («Do you want to create the net based on a MemBrain lesson file?», MB_YESNO) == IDYES)
{
gUseLesson = true;
CreateIOFromMbl ();
}
else
{
CreateIOFromUserInput ();
}
Здесь выводится сообщение с запросом ответа Да или Нет.
При проверке очередного условия может проявиться превышение ожидаемого параметра:
{
if (count> gMaxHidLayerCount)
{
MessageBox («Too many hidden layers!»);
AbortScript ();
}
Тогда выводится сообщение о чрезмерном количестве скрытых файлов.
При удовлетворительном ответе:
// Success. Adjust the size of the hidden layer array now.
gHidLayers.resize (count);
}