Нейросетевые технологии. Каширина И.Л. - 63 стр.

UptoLike

Составители: 

63
Размер распознаваемого входного образа (bmp-файл) должен быть
100 × 100 точек (параметр SourceSize), а перед обработкой он приво-
дится к размеру 40 × 40 (параметр DestSize). Таким образом, количество
входов сети – 1600 (параметр n). Количество выходов m совпадает с коли-
чеством цифр и равняется 10. Вес отрицательной обратной связи
ε
второго
слоя был принят равным –0.05.
Описание типов, констант и переменных:
type InputNeiron =recopd // Типнейрон первого слоя
w: array[1..n] of real;
// Весовые коэффициенты входов
Output: real; // Выход
end;
Neiron= recopd // Типнейрон второго слоя
Output:real; // Выход
Sum: real // Взвешенная сумма входов
end;
const SourceSize=100; // Размер стороны исходного изображения
DestSize=40; // Размер стороны изображения для распознавания
N=DestSize*DestSize; // Сколько входов
m=10; // Сколько образов
e=-1/(M*2); // Вес синапсов второго слоя
var InputRow: array[1..m] of InputNeiron//Первый слой нейронов
SecondRow: array[1..m] of Neiron//Второй слой нейронов
I1,I2: TImage;//Эталонный и масштабированный образы
Outputs=array[1..m] of real; // Копия выходов предыдущего прохода
i,j,x,y,count,max, index:integer;
Алгоритм обучения сети Хэмминга, адаптированный для данной задачи,
выглядит следующим образом.
1. Выбирается i-й входной образ.
2. Изображение локализуется и приводится к нужному масштабу.
3. Образ поточечно подаётся на входы i-го нейрона. Если k-я точка
образа чёрная, то весу k-го входа присваивается значение 0.5, в противном
случае –0.5 .
4. Переход на шаг 1, пока не
будут исчерпаны все эталонные образы.
Программный код алгоритма обучения:
I1:=TImage.Greate(self);
I2:=TImage.Greate(self);
I2.Width:=DestSize;
I2.Height:=DestSize;
for i:=1 to m do
begin
I1.Picture.LoadFromFile(IntToStr(i-1)+’.bmp’);
vScale(I1,I2); // Читаем и масштабируем образ
end;
for x:=1 to DestSize do
for y:=1 to DestSize do // Перебираем поточечно
if(I2.Canvas.Pixels[x-1,y-1]=clBlack)then Inpu-
tRow[i].W[x*DestSize+y]=0.5;
else InputRow[i].W[x*DestSize+y]=-0.5;
      Размер распознаваемого входного образа (bmp-файл) должен быть
100 × 100 точек (параметр SourceSize), а перед обработкой он приво-
дится к размеру 40 × 40 (параметр DestSize). Таким образом, количество
входов сети – 1600 (параметр n). Количество выходов m совпадает с коли-
чеством цифр и равняется 10. Вес отрицательной обратной связи ε второго
слоя был принят равным –0.05.
Описание типов, констант и переменных:
type  InputNeiron =recopd // Тип — нейрон первого слоя
                   w: array[1..n] of real; // Весовые коэффициенты входов
                   Output: real; // Выход
                   end;
       Neiron= recopd // Тип — нейрон второго слоя
               Output:real; // Выход
               Sum: real // Взвешенная сумма входов
               end;
const SourceSize=100; // Размер стороны исходного изображения
       DestSize=40;     // Размер стороны изображения для распознавания
       N=DestSize*DestSize; // Сколько входов
        m=10;                   // Сколько образов
        e=-1/(M*2);           // Вес синапсов второго слоя
var InputRow: array[1..m] of InputNeiron//Первый слой нейронов
     SecondRow: array[1..m] of Neiron//Второй слой нейронов
     I1,I2: TImage;//Эталонный и масштабированный образы
     Outputs=array[1..m] of real; // Копия выходов предыдущего прохода
     i,j,x,y,count,max, index:integer;


Алгоритм обучения сети Хэмминга, адаптированный для данной задачи,
выглядит следующим образом.
1. Выбирается i-й входной образ.
2. Изображение локализуется и приводится к нужному масштабу.

3. Образ поточечно подаётся на входы i-го нейрона. Если k-я точка
образа чёрная, то весу k-го входа присваивается значение 0.5, в противном
случае –0.5 .
4. Переход на шаг 1, пока не будут исчерпаны все эталонные образы.
Программный код алгоритма обучения:
I1:=TImage.Greate(self);
I2:=TImage.Greate(self);
I2.Width:=DestSize;
I2.Height:=DestSize;
for i:=1 to m do
begin
I1.Picture.LoadFromFile(IntToStr(i-1)+’.bmp’);
vScale(I1,I2); // Читаем и масштабируем образ
end;
for x:=1 to DestSize do
   for y:=1 to DestSize do // Перебираем поточечно
      if(I2.Canvas.Pixels[x-1,y-1]=clBlack)then Inpu-
tRow[i].W[x*DestSize+y]=0.5;
                                   else InputRow[i].W[x*DestSize+y]=-0.5;

                                     63