Материал: Лабораторная работа 4

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Код программы, моделирующей, обучающей и тестирующей работу нейронной сети, на языке Python с использованием библиотеки Neurolab представлен в табл. 5.

Таблица 5 — Код на Python (Neurolab)

program2.py

"""

Python 3.8.8 (tags/v3.8.8:024d805, Feb 19 2021, 13:18:16) [MSC v.1928 64 bit (AMD64)] on win32

-neurolab version is 0.3.5

-matplotlib version is 3.3.4

-numpy version is 1.19.5

"""

import neurolab as nl import numpy as np

from matplotlib import pyplot

#=== Исходные данные ===

#Обучающая выборка из 15 точек

X = np.array([3, 5, 4, 6, -4, -2, -4, -3, 6, 6, 8, 7, -2, -4, -2, -3], float)

Y = np.array([-1, -1, -3, 1, -2, -2, -4, -4, 9, 6, 6, 4, 6, 4, 4, 2], float) P = np.c_[X, Y]

# Проверочная выборка (14 вариант)

A = np.array([[0, 1, -1], [1, -1, -1]], float)

Axy = list(zip(*A))

#Axy = [[x, y] for x in range(-8, 12 + 1) for y in range(-8, 12 + 1)]

#Маркеры центров классов

center_markers = ['k*', 'kx', 'ks', 'kd']

#Маркеры классов обучающей выборки (по классам) training_markers = ['r*', 'rx', 'rs', 'rd']

#Маркеры классов проверочной выборки (по классам) test_markers = ['b*', 'bx', 'bs', 'bd']

#Минимальные и максимальные значения координат min_c = min([-10, min(X), min(Y)])

max_c = max([+10, max(X), max(Y)])

#=== Построение нейронной сети Кохонена ===

#Диапазон значений входов: от -10 до 10; 4 класса

net = nl.net.newc([[min_c, max_c], [min_c, max_c]], 4)

#Обучение сети

error = net.train(P, epochs=200, show=0)[-1]

while error > 34: # До тех пор, пока ошибка не будет приемлемой2 error = net.train(P, epochs=200, show=0)[-1]

W = net.layers[0].np['w'] # Матрица весов

#Моделирование работы нейронной сети на проверочной выборке a = net.sim(Axy)

#Визуализация полученного результата

pyplot.figure(figsize=(5, 5), dpi=90) # Создание нового окна с графиком

#Функция построения точек p согласно указанным в sim_p классам

#и стилем, задаваемым markers

def plot_sim_p(p, sim_p, markers): for i in range(sim_p.shape[0]):

for j in range(sim_p.shape[1]): if sim_p[i][j] == 1:

pyplot.plot(p[i][0], p[i][1], markers[j]) break

p = net.sim(P) # Моделирование работы на обучающей выборке

 

plot_sim_p(P, p, training_markers)

# Построение

обучающей

выборки

# Центры кластеров

 

 

 

pyplot.plot(W[0, 0], W[0, 1], center_markers[0],

W[1, 0], W[1, 1], center_markers[1],

W[2, 0], W[2, 1], center_markers[2],

W[3, 0], W[3, 1], center_markers[3])

plot_sim_p(Axy, a, test_markers)

# Построение проверочной

выборки

pyplot.axis([(min_c + 2), (max_c + 2), (min_c + 2), (max_c

+ 2)]) # Установка границ

pyplot.xlabel('X')

 

 

 

2Результат работы зависит от начальных установок сети. Итоговая ошибка обычно варьируется от 33 до 60.

6

pyplot.ylabel('Y') pyplot.grid() pyplot.show()

Результат запуска программы представлен на рис. 4, 5.

Рисунок 4 — Общая классификация

Рисунок 5 — Классификация сетки точек

Заключение В результате выполнения лабораторной работы мы изучили модель

слоя Кохонена и алгоритм обучения без учителя; создали и исследовали модель слоя Кохонена в системе MATLAB и с использованием языка программирования Python с библиотекой Neurolab.

Применение функций пакета Neural Network Toolbox существенно упрощает построение, обучение и использование ИНС.

7

Источник: https://studfile.net/preview/16462617/