Генератор программного кода
Генератор программного кода был разработан для того, чтобы обеспечить возможность автоматического написания программного кода для использования построенных с помощью NeuroShell 2 маленьких сетей и сетей среднего размера. Он может использоваться и для больших сетей, но в этом случае, вероятно, придется проделать некоторую предварительную работу по запуску кода, так как многие компиляторы не смогут скомпилировать такое количество кода, которое сможет создать Генератор. Этот вопрос дополнительно обсуждается позже. Если Вы хотите вызывать сети из программ, написанных для работы в Microsoft Windows, то не следует применять Генератор программного кода; гораздо проще и быстрее вызвать функцию FireNet из нашей динамической библиотеки (DLL). Если, однако, хотите иметь возможность вызывать (применять) сеть из программы ДОС, на рабочей станции, на большой ЭВМ или с помощью какого-либо специализированного процессора, Генератор программного кода подходит. Генерируемый им программный код является очень общим, полностью самодостаточным и не содержит вызовов библиотек или сложных конструкций. Он даже не содержит циклов, и потому может быть легко переложен почти на любой язык (хотя отсутствие циклов делает его непригодным для больших сетей). Для работы с электронными таблицами лучше всего воспользоваться вызовом функции Predict из Excel, но если захотите использовать формулы, созданные Генератором программного кода, это окажется особенно удобным, так как программный код не содержит циклов. Генератор программного кода может генерировать код на Си, Microsoft Visual Basic или на языке очень общего вида, который мы называем "формулы для калькулятора". Код генерируется в форме подпрограммы с названием Fire_имя, которая, как и ее аналог в DLL, FireNet, имеет два аргумента: адрес (указатель) на массив с плавающей запятой, содержащий входные значения, и адрес массива с плавающей запятой для выходных значений. При вызове процедуры Fire_имя Вы передаете ей оба адреса, но только входной массив должен содержать данные - значения входов. После возврата из Fire_имя в выходной массив оказываются записаны значения выходов. Fire_имя автоматически изменяет масштаб входных и выходных переменных, поэтому они передаются в том же виде, в каком предъявили бы их NeuroShell 2. Кроме того, Вы должны предъявлять их в том же порядке, в каком они находились в столбцах тренировочного файла. Однако если в этом файле между входными столбцами попадались неиспользуемые или выходные столбцы, то последние необходимо игнорировать. Если у сети 14 входов, то массив, передаваемый в Fire_имя, должен иметь 14 ячеек. Ответы, возвращаемые подпрограммой Fire_имя, должны быть очень близки к ответам, получаемым от NeuroShell 2, хотя они могут слегка различаться после 4-й или 5-й значащей цифры. Это происходит из-за отличий в точности, компиляторах и т.д. Как пользоваться Генератором программного кода 1. На главном экране NeuroShell 2 выберите Средства автономного использования. 2. Выберите Генератор программного кода. На экране появятся каталог и имя файла конфигурации (.FIG) для текущей задачи, а также имя файла, в который будет записан код программы после его создания. Для изменения имен файлов воспользуйтесь меню Файл, пунктами Выбор файла конфигурации или Выбор файла кода. 3. Щелкните мышью по кнопке переключателя, расположенной возле желаемого типа кода: Программный код на языке Си (генерируется файл с расширением.C) Программный код на языке Visual Basic (генерируется файл с расширением.VB) Формулы для калькулятора (генерируется файл с расширением.FLA) 4. Для создания программного кода воспользуйтесь пунктом Начать генерацию программного кода в меню Работа.
Разбиение программного кода для больших сетей Если в Вашей сети большое количество скрытых нейронов, Ваш компилятор может отказаться компилировать большой файл, созданный Генератором программного кода. Вы можете попробовать разбить код на несколько частей, каждая из которых будет содержать свою процедуру, скомпилировать их независимо и скомпоновать их вместе в единую программу. Затем скомпилируйте первичную процедуру, которая будет поочередно вызывать каждую из полученных после разбиения процедур.
|