Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR_2.doc
Скачиваний:
5
Добавлен:
16.07.2019
Размер:
298.5 Кб
Скачать

Розрахунки:

Алгоритм зупиняється на 70 ітерації, тому що значення похибки меньше заданого . Розрахунки проводились в Microsoft Excel 2000.

Програма

Тепер реалізуємо даний алгоритм програмно. Для цього скористаємося пакетом Microsoft Excel (зберігатиме результати виконання програми). Сама програма була реалізована з допомогою за допомогою мови програмування Visual Basic for Applications, її лістинг подано нижче.

Public Sub CommandButton1_Click()

Dim Emin As Variant, W(3, 16) As Double, x(6, 16) As Double, D(6, 3) As Double, Count As Integer

Dim dob1(3, 16) As Variant, dob2(3, 16) As Variant, dob3(3, 16) As Variant

Dim dob4(3, 16) As Variant, dob5(3, 16) As Variant, dob6(3, 16) As Variant

Dim net(6, 3) As Variant, net1(3) As Variant, net2(3) As Variant, net3(3) As Variant, net4(3) As Variant, net5(3) As Variant, net6(3) As Variant

Dim o(6, 3) As Variant, dw(6, 3) As Variant, e(6, 3) As Variant, o1(6, 3) As Variant, dE(79) As Variant

For i = 1 To 16

x(1, i) = Лист4.Cells(2, i + 1): x(2, i) = Лист4.Cells(3, i + 1): x(3, i) = Лист4.Cells(4, i + 1)

x(4, i) = Лист4.Cells(5, i + 1): x(5, i) = Лист4.Cells(6, i + 1): x(6, i) = Лист4.Cells(7, i + 1)

W(1, i) = Лист4.Cells(9, i + 1): W(2, i) = Лист4.Cells(10, i + 1): W(3, i) = Лист4.Cells(11, i + 1)

Next i

For i = 1 To 3

D(1, i) = Лист4.Cells(2, i + 17)

D(2, i) = Лист4.Cells(2, i + 17)

D(3, i) = Лист4.Cells(3, i + 17)

D(4, i) = Лист4.Cells(3, i + 17)

D(5, i) = Лист4.Cells(4, i + 17)

D(6, i) = Лист4.Cells(4, i + 17)

Next i

Emin = Лист4.Cells(8, 20): c = Лист4.Cells(8, 18): eta = Лист4.Cells(8, 19)

x:

For i = 1 To 6

For k = 1 To 3

e(i, k) = 0

net(i, k) = 0

o(i, k) = 0

dw(i, k) = 0

Next k

Next i

Count = Count + 1

Лист4.Cells(23, 19) = Count

For i = 1 To 6

For k = 1 To 3

For t = 1 To 16

net(i, k) = net(i, k) + W(k, t) * x(i, t)

Next t

Лист4.Cells(14 + i, k + 1) = net(i, k)

o(i, k) = (2 / (1 + Exp(-eta * net(i, k)))) - 1

Лист4.Cells(14 + i, 6 + k) = o(i, k)

dw(i, k) = eta * (D(i, k) - o(i, k)) * 0.5 * (1 - o(i, k) ^ 2)

Лист4.Cells(14 + i, 11 + k) = dw(i, k)

For n = 1 To 16

W(k, n) = dw(i, k) * x(i, n) + W(k, n)

Лист4.Cells(21 + k, n) = W(k, n)

Next n

e(i, k) = e(i, k - 1) + 0.5 * (D(i, k) - o(i, k)) ^ 2

Лист4.Cells(14 + i, 16 + k) = e(i, k)

Next k

Next i

For k = 1 To 3

For i = 1 To 16

W(k, i) = Лист4.Cells(21 + k, i)

Next i

Next k

dE(Count) = e(1, 1)

For i = 1 To 6

For k = 1 To 3

If e(i, k) > e(i - 1, k - 1) Then dE(Count) = e(i, k)

Next k

Next i

Лист4.Cells(Count, 21) = Count

Лист4.Cells(Count, 22) = dE(Count)

For i = 1 To 6

For k = 1 To 3

If e(i, k) > 0.05 Then GoTo x

Next k

Next i

End Sub

Результати:

В результаті знайдені вектора ваг (матриця ):

Нижче представлена залежність зміни значення похибки від ітерацій.

Перевіримо правильність роботи навченого перцептрона на тестових величинах.

Перевірку проведемо по одній букві з кожного класу.

Таблиця тестових даних:

Буква

y1

y2

y3

y4

y5

y6

y7

y8

y9

y10

y11

y12

у13

y14

y15

y16

d1

d2

d3

Клас

А

0

1

0

1

0

1

1

1

1

1

0

1

1

0

1

1

+1

-1

-1

1

Е

1

1

1

1

0

0

1

1

0

1

0

0

1

1

1

1

-1

+1

-1

2

G

0

1

1

1

0

0

1

0

1

1

0

1

0

1

1

1

-1

-1

+1

3

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]