Искусственные нейронные сети. Каширина И.Л. - 49 стр.

UptoLike

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

49
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 InputRow[i].W[x*DestSize+y]=0.5;
else InputRow[i].W[x*DestSize+y]=-0.5;
Для успешной работы нужно выяснить точный размер и местоположение образа
цифры. После локализации приводим образ к размеру 40*40 (масштабирова -
ние). Эти операции выполняет функция vScale(I1:TImage, var I2:TImage)- как
на этапе обучения сети, так и на этапе распознавания. Для эталона , ввиду
отсутствия помех, локализацию провести очень просто: достаточно последова -
тельно просмотреть все точки образа и найти границы цифры.
Локализация и масштабирование:
var MinX,MinY,MaxX,MaxY:integer; // Границы локализованной цифры
ScaleX, ScaleY: real//// Коэффициенты сжатия
begin
MinX:= SourceSize+1;
MinY= MinX;
MaxX= -1;
MaxY= -1;
for x:=0 to SourceSize-1 do//массив Pixels нумеруется с 0
for y:=0 to SourceSize-1 do
if I1.Canvas.Pixels[x,y]=clBlack then begin
if x<MinX then MinX=x;
if y<MinY then MinY=y;
if x>iMaxX then MaxX=x;
if y>iMaxY then MaxY=y end;
                                        49
               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 InputRow[i].W[x*DestSize+y]=0.5;
                                       else InputRow[i].W[x*DestSize+y]=-0.5;

Для успешной работы нужно выяснить точный размер и местоположение образа
цифры. После локализации — приводим образ к размеру 40*40 (масштабирова-
ние). Эти операции выполняет функция vScale(I1:TImage, var I2:TImage)- как
на этапе обучения сети, так и на этапе распознавания. Для эталона, ввиду
отсутствия помех, локализацию провести очень просто: достаточно последова-
тельно просмотреть все точки образа и найти границы цифры.
Локализация и масштабирование:
var MinX,MinY,MaxX,MaxY:integer; // Границы локализованной цифры
       ScaleX, ScaleY: real//// Коэффициенты сжатия
begin
MinX:= SourceSize+1;
MinY= MinX;
MaxX= -1;
MaxY= -1;
for x:=0 to SourceSize-1 do//массив Pixels нумеруется с 0
   for y:=0 to SourceSize-1 do
       if I1.Canvas.Pixels[x,y]=clBlack then begin
                             if xiMaxX then MaxX=x;
                             if y>iMaxY then MaxY=y end;