Программа Neural Network Wizard предназначена для проведения исследований с целью выбора оптимальной конфигурации нейронной сети, позволяющей наилучшим образом решить поставленную задачу. Результатом работы системы является файл, который хранит в себе все параметры полученной нейронной сети. Далее, на основе этого файла, можно разрабатывать систему, предназначенную для решения конкретных задач. Для этого был разработан модуль, позволяющий работать с этим файлом.
В данный модуль включено несколько классов, предназначенных для создания нейросети, загрузки ее параметров из файла, созданного программой Neural Network Wizard и использования полученной нейросистемы. В этот комплект входит файл WizardNN.dcu, который и содержит в себе классы для работы с нейросетями
Рассмотрим основные классы этого модуля:
Класс TWizardNeuralNetwork
Представляет собой собственно нейросеть. Рассмотрим подробнее методы и свойства этого класса, предназначенные для нейросетевого расчета.
type
TWizardNeuralNetwork = class (TNeuralNetworkINI)
Private
// …
public
constructor Create;
procedure LoadFromWizardFile(FileName:string);
procedure StoreToFile(FileName:string);
property InputValues[inputName:string]:double;
property OutputValues[inputName:string]:double;
property InputsList:TStringList;
property OutputsList:TStringList;
procedure Compute;
end;
Свойства:
InputValues[inputName:string]:double – значения входов нейросети.
OutputValues[inputName:string]:double – значения выходов нейросети
InputsList : TstringList – список названий входов нейросети
OutputsList : TStringList – список названий выходов нейросети
Методы:
Create – конструктор класса
LoadFromWizardFile(FileName:string) – чтение параметров нейросети из файла Neural Network Wizard
Compute – расчет с использованием нейросети
Значения входов и выходов нейросети должны лежать в том же диапазоне, что и значения, используемые при обучении системы. Информация об этом диапазоне и способе нормиро2оания каждого из входов берется из файла Neural Network Wizard.
Имена входов и выходов, которые указываются для доступа к нейросети, должны совпадать с именами полей обучающей выборки
А теперь рассмотрим простой пример, показывающий использование нейросети в прикладной программе. Предположим, что мы создаем программу, которая умеет складывать два числа, используя для реализации операции сложения нейронную сеть. Используем среду Delphi 4, для которой и разрабатывался данный модуль.
Предварительно обучим нейросеть с использованием Neural Network Wizard, используя для обучения следующий файл:
s1 s2 res
0 0 0
1 1 2
2 2 4
3 3 6
4 4 8
5 5 10
6 6 12
7 7 14
8 8 16
9 9 18
10 10 20
файл sum.txt
Результаты обучения сохраним в файле sum.nnw
В результате в этом файле хранятся коэффициенты передач обученной нейросети, которая может использоваться для сложения чисел с интервале [0,10]
Затем приступим к разработке приложения:
На форме надо разместить два компонента TEdit, компонент TButton и TLabel (см ниже)
Установим обработчики сообщений на создание формы (Form1.OnCreate) и на нажатие кнопки (Button1.OnClick).
Исходный текст модуля примет вид:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
WizardNN, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
NeuralNetwork : TWizardNeuralNetwork;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
NeuralNetwork := TWizardNeuralNetwork.Create; // создаем нейросеть
NeuralNetwork.LoadFromWizardFile(ExtractFilePath(paramstr(0))+'sum.nnw'); // читаем параметры НС из файла
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with NeuralNetwork do
begin
InputValues['s1'] := StrToFloat(Edit1.Text); // устанавливаем входы НС
InputValues['s2'] := StrToFloat(Edit2.Text); //
Compute; // рассчитываем с использование НС
Label1.Caption := FloatToStr(OutputValues['res']); // выводим результат расчета
end;
end;
end.