18804

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

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

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

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

Русский

2014-03-24

269 KB

44 чел.

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

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

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

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

Лабораторная работа № 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()+":)");

   }                                        

Результат:

 

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


 

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

11688. Научиться проводить диагностику системы с помощью программ Everest, CPU-Z, Sandra, Belarc Advisor, FreshDiagnose и д.р 401 KB
  Лабораторная работа №5 Тема: Диагностика основных блоков ПК. Цель работы: Научиться проводить диагностику системы с помощью программ Everest CPUZ Sandra Belarc Advisor FreshDiagnose и д.р. Теоретические сведения Компьютер высокотехнологичная вещь он состоит из множества неза...
11689. Вивчення архітектури материнської плати 35.5 KB
  Лабораторна робота №6 Тема: Вивчення архітектури материнської плати. Мета: Визначити архітектуру та основні складові системної плати. Структура заняття І. Організаційна частина заняття. Перевірка присутності студентів на занятті. ІІ. По...
11690. Застосування постійного запамятовуючого пристрою (BIOS) для визначення конфігурації ЕОМ 33 KB
  Практична робота №7 Тема: Застосування постійного запамятовуючого пристрою BIOS для визначення конфігурації ЕОМ. Мета: Отримати практичні навички при роботі з базовою системою введення виведення даних BIOS. Структура заняття І. Організаційна частина зан
11691. Програмування таймера 61.5 KB
  ЛАБОРАТОРНА РОБОТА №8 Тема: Програмування таймера. Ціль: Вивчення функцій системного таймера і закріплення практичних навичок роботи з ним. Теоретичні відомості. Усі компютери IBM містять 3х канальніий 16ти розрядний пристрій званий системним таймером. Для...
11692. Діагностика памяті 107 KB
  Лабораторна робота №9 Діагностика памяті Ціль роботи: вивчити теоретичний матеріал по даній темі ознайомитися з настроюванням таймінгов памяті в BІOS SETUP ознайомитися з програмами для перевірки й тестування системної памяті MemTest86 TestMem 4 SM Everest вивчити апаратні й...
11693. Програмування клавіатури 44 KB
  ЛАБОРАТОРНА РОБОТА №10. Тема: Програмування клавіатури. Ціль: Навчитися управляти перериваннями клавіатури. Теоретичні відомості Порти для роботи з к...
11694. Теория систем и социальные системы бизнеса 246.41 KB
  Теория систем и социальные системы бизнеса В последние годы в мире явно наблюдается возрастание интереса к теоретическим вопросам эффективной организации и ведения бизнеса. Особое внимание уделяется подведению теоретического фундамента под практическую деятельно...
11695. Визначення конфігурації ПК 87.5 KB
  ЛАБОРАТОРНА РОБОТА №9. Тема: Визначення конфігурації ПК. Ціль: Отримати практичні навички програмування визначення конфігурації компютера. Теоретичні відомості У вас є дві можливості визначити модель компютера і отримати деяку інформацію про конфігурац...
11696. Використання розширеної памятіта можливостей XMS драйверів 106.5 KB
  ЛАБОРАТОРНА РОБОТА №12. Тема: Використання розширеної памятіта можливостей XMS драйверів. Ціль: Отримати практичні навички звернення до драйвера розширеної памяті і вивчити її основні функції. Теоретичні ві...