18804

Однослойная нейронная сеть, решающая задачу распознавания

Лабораторная работа

Информатика, кибернетика и программирование

Изучение алгоритмов обучения нейронных сетей, получение практических навыков работы с простейшими нейронными сетями, для обучения которых используется алгоритм Хебба и алгоритм Розенблатта.

Русский

2014-03-24

269 KB

37 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУЛИКИ БЕЛАРУСЬ

УО «БАРАНОВИЧСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

ИНЖЕНЕРНЫЙ ФАКУЛЬТЕТ

КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ И ТЕХНОЛОГИЙ

Лабораторная работа № 2

По дисциплине: «Искусственный интеллект»

По теме: «Однослойная нейронная сеть, решающая задачу распознавания»

                       Выполнил: студентка гр. ИСТ-41

           Цебрук Е. В.

           Проверил: Шах А. В.

Барановичи   2012

Цель работы: изучение алгоритмов обучения нейронных сетей, получение практических навыков работы с простейшими нейронными сетями, для обучения которых используется алгоритм Хебба и алгоритм Розенблатта.

Постановка задачи

Разработать структуру однослойной нейронной сети, способной распознавать четыре различные буквы Вашего имени или фамилии. Обосновать выбор:

  •  числа рецепторных нейронов (входов); число п х-элементов сети должно быть в пределах 12<п<30;
  •  числа выходных нейронов (нейронов сети);
  •  выбор векторов выходных сигналов.

Разработать программу, моделирующую нейронную сеть, способную обучаться по правилу Хебба или по алгоритму Розенблатта для распознавания четырех заданных букв.

Код программы:

public class NewJFrame extends javax.swing.JFrame {

double w[][],eps=0.01,a=0.001,

      etalon1=8,

      etalon2=30,

      etalon3=10,

      etalon4=20,

      etalon6,

      etalon7;

int n=30,evalut=0,

   activn1[][],

   activn2[][],

   activn3[][],

   activn4[][],

   activn6[][],

   activn7[][];

   // подсчет суммы весов

   public double summ(double wes[][],int act[][]){

   double s=0;

   

   for(int i=0;i<5;i++){

       for(int j=0;j<6;j++){

           if(act[i][j]==1){

               s+=wes[i][j];

           }

       }}

   return s;

   }

   

   //изменение весов

   public void update(int act[][],double etl){

   for(int i=0;i<5;i++){

       for(int j=0;j<6;j++){

               if(act[i][j]==1) w[i][j]=w[i][j]+a*(etl-summ(w,act));

           }}}

     

   //определение активности

   public int[][] actiw(JTable tbl){

   int ac[][];

   ac=new int[5][6];

   for(int i=0;i<5;i++){

       for(int j=0;j<6;j++){

       if(tbl.getValueAt(i,j)=="^"){

               ac[i][j]=1;

           }else ac[i][j]=0;

       }

   }

       return ac;

   

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

w=new double [5][6];

activn1=new int[5][6];

activn2=new int[5][6];

activn3=new int[5][6];

activn4=new int[5][6];

activn6=new int[5][6];

activn7=new int[5][6];

Random rd = new Random();

   //начальные веса

   for(int i=0;i<5;i++){

       for(int j=0;j<6;j++){

           w[i][j]=(1+rd.nextInt(50-1))/100.0;                

       }

   }

       //активность

       activn1=actiw(jTable1);

       activn2=actiw(jTable2);

       activn3=actiw(jTable3);

       activn4=actiw(jTable4);

while(evalut<100000){   

if(Math.abs(summ(w,activn1)-etalon1)>eps){

update(activn1,etalon1);

}

if(Math.abs(summ(w,activn2)-etalon2)>eps){

update(activn2,etalon2);

}

if(Math.abs(summ(w,activn3)-etalon3)>eps){

update(activn3,etalon3);

}

if(Math.abs(summ(w,activn4)-etalon4)>eps){

update(activn4,etalon4);

}

evalut++;

if ((Math.abs(summ(w,activn1)-etalon1)<eps && Math.abs(summ(w,activn2)-etalon2)<eps &&  Math.abs(summ(w,activn3)-etalon3)<eps && Math.abs(summ(w,activn4)-etalon4)<eps)) break;

}

activn6=actiw(jTable6);

activn7=actiw(jTable7);

etalon6=summ(w,activn6);

etalon7=summ(w,activn7);

jTextArea1.append("Ура! Веса подобраны :)");

jButton2.setEnabled(true);

   }                                        

   private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         

   double sum;  

   jTextArea1.setText("");

   sum=summ(w,actiw(jTable5));

   jTextArea1.append("Общий вес="+String.valueOf(summ(w,actiw(jTable5))+"\n"));

   if(Math.abs(sum-etalon1)<Math.abs(sum-etalon2) && Math.abs(sum-etalon1)<Math.abs(sum-etalon3) && Math.abs(sum-etalon1)<Math.abs(sum-etalon4) && Math.abs(sum-etalon1)<Math.abs(sum-etalon6) && Math.abs(sum-etalon1)<Math.abs(sum-etalon7)) jTextArea1.append("Это буква Ц!");  

   if(Math.abs(sum-etalon2)<Math.abs(sum-etalon1) && Math.abs(sum-etalon2)<Math.abs(sum-etalon3) && Math.abs(sum-etalon2)<Math.abs(sum-etalon4) && Math.abs(sum-etalon2)<Math.abs(sum-etalon6) && Math.abs(sum-etalon2)<Math.abs(sum-etalon7)) jTextArea1.append("Это буква К!");

   if(Math.abs(sum-etalon3)<Math.abs(sum-etalon1) && Math.abs(sum-etalon3)<Math.abs(sum-etalon2) && Math.abs(sum-etalon3)<Math.abs(sum-etalon4) && Math.abs(sum-etalon3)<Math.abs(sum-etalon6) && Math.abs(sum-etalon3)<Math.abs(sum-etalon7)) jTextArea1.append("Это буква Е!");

   if(Math.abs(sum-etalon4)<Math.abs(sum-etalon1) && Math.abs(sum-etalon4)<Math.abs(sum-etalon2) && Math.abs(sum-etalon4)<Math.abs(sum-etalon3) && Math.abs(sum-etalon4)<Math.abs(sum-etalon6) && Math.abs(sum-etalon4)<Math.abs(sum-etalon7)) jTextArea1.append("Это буква И!");

   if(Math.abs(sum-etalon6)<Math.abs(sum-etalon1) && Math.abs(sum-etalon6)<Math.abs(sum-etalon2) && Math.abs(sum-etalon6)<Math.abs(sum-etalon3) && Math.abs(sum-etalon6)<Math.abs(sum-etalon4) && Math.abs(sum-etalon6)<Math.abs(sum-etalon7)) jTextArea1.append("Это буква "+jTextField1.getText()+":)");

   if(Math.abs(sum-etalon7)<Math.abs(sum-etalon1) && Math.abs(sum-etalon7)<Math.abs(sum-etalon2) && Math.abs(sum-etalon7)<Math.abs(sum-etalon3) && Math.abs(sum-etalon7)<Math.abs(sum-etalon4) && Math.abs(sum-etalon7)<Math.abs(sum-etalon6)) jTextArea1.append("Это буква "+jTextField2.getText()+":)");

   }                                        

Результат:

 

Вывод: изучила алгоритмы обучения нейронных сетей, получила практические навыки работы с простейшими нейронными сетями, для обучения которых используовался алгоритм Хебба и алгоритм Розенблатта.


 

А также другие работы, которые могут Вас заинтересовать

13620. Сократ. Я считаю обязательным для каждого беспрекословно и неуклонно повиноваться законам 15.85 KB
  Я считаю обязательным для каждого беспрекословно и неуклонно повиноваться законам. Сократ В выбранном мною высказывании автор затрагивает проблему сущности закона. Эта проблема актуальна во все времена так как закон регулирует общественную жизнь делая ее более
13621. Истинное равенство граждан состоит в том, чтобы все они одинаково были подчинены закону 16.37 KB
  Истинное равенство граждан состоит в том чтобы все они одинаково были подчинены закону. Ж. Д’Аламбер Выбранное мною высказывание посвящено проблеме верховенства права как основного критерия правового государства. Эта проблема в наше время актуальна как никогда.
13622. Чосер Дж. Кто для других законы составляет, пусть те законы первым соблюдает 17.03 KB
  Кто для других законы составляет пусть те законы первым соблюдает. Дж. Чосер В выбранном мною высказывании автор высказывания английский поэт Джеффри Чосер обращается к проблеме верховенства права и беспрекословного его исполнения. Эта проблема актуальна в любо
13623. Истинное равенство граждан состоит в том, чтобы они были одинаково подчинены законам 13.94 KB
  Истинное равенство граждан состоит в том чтобы они были одинаково подчинены законам Ж. Даламбер Автор данного высказывания затрагивает проблему равенства граждан перед законом. Данная проблема является актуальной во всем мире так как принцип равенства в соотве
13624. Архитектура - тоже летопись мира: она говорит тогда, когда уже молчат и песни, и предания, и когда уже ничто не говорит о погибшем народе 14.89 KB
  Архитектура тоже летопись мира: она говорит тогда когда уже молчат и песни и предания и когда уже ничто не говорит о погибшем народе Н. В. Гоголь Автор данного высказывания хотел сказать что письменные источники могут сгореть песни умереть вместе с народом а со
13625. Дуглас Ф. Без борьбы нет прогресса 13.86 KB
  Без борьбы нет прогресса Ф. Дуглас В основе существования вселенной лежит принцип конфликта именно он заставляет изменяться мир вокруг заставляет его существовать гореть и потухать поэтому главным источником существования был огонь. Миру всегда присуща критическа...
13626. Вам не удастся никогда создать мудрецов, если будете убивать в детях шалунов 14.21 KB
  Вам не удастся никогда создать мудрецов если будете убивать в детях шалунов.Ж.Ж. РуссоЯ думаю что автор хотел указать значение игровой деятельности в жизни человека отметить что игра в жизни человека занимает важное место. В процессе игровой деятельности человек мо
13627. Искусство - диалог, в котором собеседник молчит 14.23 KB
  Искусство диалог в котором собеседник молчит. Г.Ландау В данном выражении имеется сочетание искусство диалог. Диалог является одной из форм общения Таким образом получается что искусство это общение. То есть автор хотел указать что произведения искусства на
13628. История сама по себе не может заставить человека совершить грязное дело 15.68 KB
  История сама по себе не может заставить человека совершить грязное дело П.Сартр категория Философия.Огромный простор для размышлений открывает высказывание П.Сартра о роли человека в формировании истории а также истории в формировании человека. Существуют ли зак