Politechnika Radomska

Wydział:

Nauczycielski

Kierunek:

Informatyka

Grupa:

L3

Przedmiot:

Techniczne zastosowanie sieci neuronowych.

Temat:

1-7

Prowadzący:

Mgr A. Hermanowicz

Wykonała:

Tuszyńska Katarzyna

Data:

27.03.2008

Ocena:

  1. Cel:

Celem zadania jest skonstruowanie sieci neuronowej MLP [1] bez uczenia o strukturze 2x5x3x1 (Rysunek nr 1). Sprawdzenie odpowiedzi sieci i jej granic decyzyjnych. Przeprowadzenie testów dla dwóch różnych funkcji aktywacji:

f(x) = 0x01 graphic
(1)

f(x) = 0x01 graphic
(2)

  1. Struktura sieci:

0x08 graphic

Rys. 1. Struktura sieci 2x5x3x1

  1. Funkcje aktywacji:

Funkcje aktywacji podane są w punkcie 1. (Równania (1) i (2)).

  1. Opis programu:

Rysunek nr 2 przedstawia interfejs graficzny programu. Dane do programu można wprowadzać na dwa sposoby:

W miejsce myślników po wciśnięciu przycisku „Wagi losowe” ukażą się losowe wagi.

0x08 graphic

Rys. 2. Interfejs graficzny programu

0x01 graphic

Rys. 3. Okno pojawiające się po wciśnięciu przycisku „Wprowadź dane”

0x08 graphic

Rys. 4. Wynik programu dla pierwszej z funkcji aktywacji przy podanych wagach

0x01 graphic

Rys. 5. Wynik programu dla drugiej z funkcji aktywacji przy podanych wagach

Rys. 4 i Rys. 5 przedstawiają wynik programu dla tych samych danych, ale przy zastosowaniu dwóch różnych funkcji aktywacji.

  1. Kod źródłowy:

public double f1(double n)

{

double w;

w=1/(2+Math.Exp(-n));

return w;

}

public double f2(double n)

{

double w;

w = (1 - Math.Exp(-n)) / (1 + Math.Exp(-n));

return w;

}

public double wy(double[] wej, double[] wa)

{

wyne = 0;

for (int i = 0; i <= wa.Length - 2; i++)

{

wyne = wyne + wa[i] * wej[i];

}

wyne = wyne + wa[wa.Length - 1];

return wyne;

}

public void wątek1()

{

int x;

int y;

double[] wej = new double[2];

double[] wej2 = new double[5];

double[] wej3 = new double[3];

double ks = 0;

Random los = new Random();

while (true)

{

x = los.Next(-100, 100);

wej[0] = x;

y = los.Next(-100, 100);

wej[1] = y;

if (radioButton1.Checked == true)

{

double ne1 = n.wy(wej, wa1);

wej2[0] = n.f1(ne1);

double ne2 = n.wy(wej, wa2);

wej2[1] = n.f1(ne2);

double ne3 = n.wy(wej, wa3);

wej2[2] = n.f1(ne3);

double ne4 = n.wy(wej, wa4);

wej2[3] = n.f1(ne4);

double ne5 = n.wy(wej, wa5);

wej2[4] = n.f1(ne5);

double ne6 = n.wy(wej2, wa6);

wej3[0] = n.f1(ne6);

double ne7 = n.wy(wej2, wa7);

wej3[1] = n.f1(ne7);

double ne8 = n.wy(wej2, wa8);

wej3[2] = n.f1(ne8);

double ne9 = n.wy(wej3, wa9);

ks = n.f1(ne9);

Graphics g = Graphics.FromImage(bmp);

Brush gr = new SolidBrush(Color.Green);

Pen z = new Pen(Color.Green, 1.0f);

Brush re = new SolidBrush(Color.Red);

Pen r = new Pen(Color.Red, 1.0f);

Brush bl = new SolidBrush(Color.Blue);

Pen b = new Pen(Color.Blue, 1.0f);

if (ks >0)

{

g.DrawEllipse(z, x + 100, 100 - y, 3, 3);

g.FillEllipse(gr, x + 100, 100 - y, 3, 3);

}

else if (ks < 0)

{

g.DrawEllipse(r, x + 100, 100 - y, 3, 3);

g.FillEllipse(re, x + 100, 100 - y, 3, 3);

}

else

{

g.DrawEllipse(b, x + 100, 100 - y, 3, 3);

g.FillEllipse(bl, x + 100, 100 - y, 3, 3);

}

pictureBox1.Image = bmp;

pictureBox1.Invalidate();

g.Dispose();

}

if (radioButton2.Checked == true)

{

double ne1 = n.wy(wej, wa1);

wej2[0] = n.f2(ne1);

double ne2 = n.wy(wej, wa2);

wej2[1] = n.f2(ne2);

double ne3 = n.wy(wej, wa3);

wej2[2] = n.f2(ne3);

double ne4 = n.wy(wej, wa4);

wej2[3] = n.f2(ne4);

double ne5 = n.wy(wej, wa5);

wej2[4] = n.f2(ne5);

double ne6 = n.wy(wej2, wa6);

wej3[0] = n.f2(ne6);

double ne7 = n.wy(wej2, wa7);

wej3[1] = n.f2(ne7);

double ne8 = n.wy(wej2, wa8);

wej3[2] = n.f2(ne8);

double ne9 = n.wy(wej3, wa9);

ks = n.f2(ne9);

Graphics g = Graphics.FromImage(bmp);

Brush gr = new SolidBrush(Color.Green);

Pen z = new Pen(Color.Green, 1.0f);

Brush re = new SolidBrush(Color.Red);

Pen r = new Pen(Color.Red, 1.0f);

Brush bl = new SolidBrush(Color.Blue);

Pen b = new Pen(Color.Blue, 1.0f);

if (ks > 0)

{

g.DrawEllipse(z, x + 100, 100 - y, 3, 3);

g.FillEllipse(gr, x + 100, 100 - y, 3, 3);

}

else if (ks < 0)

{

g.DrawEllipse(r, x + 100, 100 - y, 3, 3);

g.FillEllipse(re, x + 100, 100 - y, 3, 3);

}

else

{

g.DrawEllipse(b, x + 100, 100 - y, 3, 3);

g.FillEllipse(bl, x + 100, 100 - y, 3, 3);

}

pictureBox1.Image = bmp;

pictureBox1.Invalidate();

g.Dispose(); }

Thread.Sleep(100);

}

}

  1. Dane:

Dane wejściowe to wektory dwuwymiarowe, każda składowa wektora wejściowego zawiera się w przedziale od -1 do 1.

  1. Wnioski:

  • Bibliografia:

    1. Masters T. Sieci neuronowe w praktyce, WNT, Warszawa 1996.

    0x01 graphic

    0x01 graphic

    0x01 graphic