18804

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

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

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

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

Русский

2014-03-24

269 KB

48 чел.

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

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

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

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

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

   }                                        

Результат:

 

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


 

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

50059. Рефрактометр Рэлея 260.5 KB
  Элемент щели dx посылает в направлении φ волну с амплитудой пропорциональной dx. При этом будем считать что угол φ достаточно мал sin φ ≈ φ и что в правой щели искусственно создана дополнительная разность хода Δ одинаковая для всех ее элементов это позволит написать смещение интерференционных полос используемое для измерений в интерферометреРэлея. Интегрируя 3 найдем 4 где а расстояние между щелями b ширина щели. Первый из них описывает распределение интенсивности в дифракционной картине Фраунгофера от одной щели.
50060. Техніка пересувань футболістів у нападі та захисті 21 KB
  Футболіст пересувається короткими кроками і завжди повинен бути готовий до миттєвої зупинки або зміни темпу й напрямку руху. Найважливіше під час вистрибування вибрати відповідне місце відштовхування врахувавши швидкість та висоту руху мяча. Ефективний спосіб пересувань зміна напрямку руху. Для того щоб змінити напрямок руху з мінімальною втратою часу футболісти застосовують повороти: переступанням стрибком на опорній нозі.
50062. ОПРЕДЕЛЕНИЕ ХАРАКТЕРИСТИК РАСПРЕДЕЛЕНИЯ ПО ЭКСПЕРИМЕНТАЛЬНЫМ ДАННЫМ 110 KB
  Разность наибольшего и наименьшего членов ряда R = Xn X1 называется РАЗМАХОМ эмпирического распределения а число наблюдений n объемом выборки. Функцией распределения случайной величины для данного статистического материала ВЫБОРКИ будет частота события X где X любое возможное значение случайной величины . Значение статистической функции распределения легко вычислить подсчитав число опытов m в которых величина приняла значение меньшее чем X и разделив...
50063. Численное решение обыкновенных дифференциальных уравнений 957.5 KB
  При выполнении данной лабораторной работы были получены теоретические и практические навыки в приближенном решении дифференциальных уравнений первого порядка с начальным условием методами Эйлера, Эйлера (уточнённый), Рунге-Кутты, Адамса, Милна. Сравнивая полученные результаты вычислений с истинным значением можно сделать вывод...
50065. Дослідження дифракції Фраунгофера на одній щілині 1.37 MB
  Прилади і обладнання Гелій неоновий HeNе лазер типу ЛГ56 розсувна щілина екран з масштабною шкалою фотодіод механізм переміщення фотодіода пристрій для реєстрації електричного сигналу з фотодіода Опис установки Оптична схема установки для спостереження дифракції Фраунгофера від однієї щілини у світлі лазера наведена на рис. Результат дифракції у вигляді періодичного розподілу інтенсивності світла спостерігається на екрані 3 який розміщений на відстані l b2 від щілини 2 довжина хвилі випромінювання...
50066. Стройові та рикладні вправи 53.5 KB
  Упор - це положення в якому плечi вище точок опори. Упор присiвши Положення присiду з опорою руками в пiдлогу лiктi випрямленi долонi з пальцями нарiзно опираються в пiдлогу плечовi суглоби над кистями Упор стоячи на колiнях Положення при якому опорними мiсцями є гомiлки зi стопами та долонi; стегна i руки перпендикулярнi до пiдлоги тулуб горизонтально Упор на лiвому правому колiнi Положення при якому опорними мiсцями є двi долонi i лiва права гомiлка зi стопою iнша нога...
50067. Букинистическая литература и ее распространение на книжном рынке РФ и Приморья 350 KB
  Важнейшая историческая задача букинистической торговли увеличить во много раз обращение книги. В отношении книжных богатств которые находятся в личном пользовании это означает максимальное вовлечение книг в повторное обращение на букинистическом рынке.