Розрахунки:
Алгоритм зупиняється на 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
|