Исследование нейронных сетей в системе Scilab



Ф ункции активации в нейронных сетях в Scilab

 

Пример 1. Рассмотрим следующие функции активации в нейронных сетях: логистическую, гиперболического тангенса, линейную.

Для их построения в Scilab предлагается следующая программа

// Иллюстрации различных функций активации в нейронных сетях

x= -10:0.1:10;

tmp = exp(-x);

y1 =1./(1+ tmp); // Логистическая функция

y2 =(1-tmp)./(1+tmp); //функция гиперболического тангенса

y3=x; // линейная Функция

subplot(2,3,1);

plot(x,y1);

set(gca(),"grid",[1 1]);

([min(x) max(x) -2 2]) ;

title('Logistic Function');

xlabel ('(a)');

('square');

subplot(2,3,2);

plot(x,y2);

set(gca(),"grid",[1 1]);

([min(x) max(x) -2 2]);

title('Hyperbolic Tangent Function');

xlabel('(b)');

('square');

subplot(2,3,3);

plot(x,y3);

set(gca(),"grid",[1 1]);

([min(x) max(x) -2 2]);

title('Identity Function');

xlabel('(c)');

('square');

Графики функций, полученные с помощью программы показаны на рис.21.

Рис. 21. Графики функций: логистической (а), гиперболического тангенса (b), линейной (c)

 

 

Персептрон для логической функции И с двумя входами

 

Пример 2. Рассмотрим программу для создания персептрона для двухвходовой (биполярной) логической функции И (AND). Использовать теоретические положения п.2 и п.3.

Для его построения в Scilab предлагается следующая программа.

//Создать персептрон для функция И с двухполярными входными сигналами и 1 выходом (целью)

//Таблица истинности для элемента И

//  X1 X2 Y

// -1 -1 -1

// -1 1 -1

// 1 -1 -1

// 1 1 1 (Bipolar (1,-1))

clc;

clear;

x=[1 1 -1 -1;1 -1 1 -1];//входы

t=[1 -1 -1 -1]; //цель (сигнал на выходе)

w=[0 0]; //веса входов

b =0; //смещение

alpha=input('Enter learning rate='); //скорость обучения

theta=input('Enter threshold value='); //пороговое значение

con=1;

epoch=0;

while con

 con=0;

for i=1:4

 yin=b+x(1,i)*w(1)+x(2,i)*w(2);

     if yin>theta then

      y=1;

 end

 if yin<=theta & yin>= -(theta) then

      y =0;

  end

  if yin<-(theta) then

      y= -1;

 end

 if y=t(i) then

      con=1;

      for j=1:2

          w(j)=w(j)+alpha*t(i)*x(j,i);

             //повышение веса

      end

      b=b+alpha*t(i) //обновление смещения

 end

 end

 epoch=epoch+1;

 end

 disp('perceptron for AND function');

 disp('Final Weight matrix');

 disp(w);

 disp('Final Bias');

 disp(b);

 

Первоначально скорость обучение задать равной α =0.1, а порог θ = 0.4. Обучением надо добиться, чтобы в конце обучения персептрон выдавал правильные выходные данные при соответствующих входных значениях согласно таблицы истинности для элемента И. При необходимости можно изменять скорость обучения и порог.

 

Создание логической функции ИЛИ с двумя входами с использованием

Нейронной сети Adaline

Пример 3. Рассмотрим программу для создания нейронной сети Adaline для двухвходовой (биполярной) логической функции ИЛИ (OR). Использовать теоретические положения п.2 и п.3.

Для его построения в Scilab предлагается следующая программа.

//Создайте функцию ИЛИ с двухполярными входными сигналами и одним выходом (целью) с использованием нейронной сети Adaline

//Таблица истинности для элемента ИЛИ

//  X1 X2 Y

// -1 -1 -1

// -1  1  1

//  1 -1  1

//  1  1  1 (Bipolar (1,-1))

clc;

clear;

disp('Нейронная сеть Adaline для функции ИЛИ с биполярными входами и выходом (целью)');

//матрица входов

x1=[1 1 -1 -1];

x2=[1 -1 1 -1];

//матрица смещений

x3=[1 1 1 1];

//вектор цели (выхода)

t=[1 1 1 -1];

//начальные веса и смещения

w1=0.1; w2=0.1; b=0.1;

//начальная скорость обучения

alpha=0.1;

//разность между желаемым и фактическим выходами сети (ошибка)

e=2;

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

delw1=0; delw2 =0; delb =0;

epoch=0;

while (e>1.018)

epoch=epoch+1;

e=0;

for i=1:4

   nety(i)=w1*x1(i)+w2*x2(i)+b;

    //рассчитанные входы сети и цели

   nt=[nety(i) t(i)];

   delw1=alpha*(t(i)-nety(i))*x1(i);

   delw2=alpha*(t(i)-nety(i))*x2(i);

   delb=alpha*(t(i)-nety(i))*x3(i);

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

   wc=[delw1 delw2 delb]

   //обновление весов

   w1=w1+delw1;

   w2=w2+delw2;

   b=b+delb;

   //новые веса

   w=[w1 w2 b];

   //матрица входов

   x=[x1(i) x2(i) x3(i)];

   //печать полученных результатов

   disp([x nt wc w]);

 end

 for i=1:4

 nety(i)=w1*x1(i)+w2*x2(i)+b;

 e=e+(t(i)-nety(i))^2;

end

 end

На экран выводятся окончательные результаты обученной сети: вектор входных данных, рассчитанной цели, вектора измененных весов, вектора измененных весов и измененного смещения.

 


Дата добавления: 2019-09-13; просмотров: 545; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!