Моделирование нейронных сетей в пакете Artificial Neuron Networks системы Scilab



 

Пакет Artificial Neuron Networks (ANN)  (искусственные нейронные сети) - это набор инструментов для моделирования нейронных сетей. Рассмотрим моделирование нейронных сетей с помощью ANN на примерах.

Пример 30. Разработка нейронной сети в Scilab для сложения 2 чисел. Данные для нейронной сети приведены в табл.1.

Таблица 1

Данные сложения двух чисел

X1 0 1 1 2 3 4 2 5 6 7 8 9 9 10 10 2 6 1 3
Х2 0 1 2 2 3 4 4 5 6 7 8 9 10 9 10 3 1 5 8
Y 0 2 3 4 6 8 6 10 12 14 16 18 19 19 20 5 7 6 11

Для того чтобы начать работать с нейронными сетями в SciLab, необходимо загрузить соответствующий модуль, для этого нужно перейти по вкладке Инструменты – Управление модулями ATOMS (рис. 11).

Затем в открывшемся окне переходим в папку Data Analisis, выбираем ANN Toolbox и Neural Network Module 2.0, нажимаем кнопку Установить и ждем установки расширения. Теперь если программу перезагружаем программу и видим в окне консоли должна появиться надпись об успешной загрузке модуля (рис. 12).

Для написания кода открываем редактор SciNotes (рис. 13). Для начала задаем входные (P) и целевые (T) параметры для обучения нейронной сети сложению чисел. Входные параметры (P) будут значения X1 и X2 из табл.1, а целевые параметры (T) значения Y (рис.14).

Далее для обучения сети используем функцию «ann_FFBP_gd» с алгоритмом обратного распространения ошибки обучения.

Рис. 11. Вкладка запуска установки модулей ATOMS

 

Рис.12. Вывод об успешной загрузке модулей

Рис.13. Окно текстового редактора SciNotes

Рис.14. Создание входных и целевых параметров в SciNotes

 

Полный синтаксис функции с алгоритмом обратного распространения ошибки обучения методом градиентного спуска имеет вид:

W=ann_FFBP_gd (P, T, N, af, lr, itermax, mse_min, gd_min),

где P- входные параметры, T- целевые параметры, N - число нейронов в каждом слое, включая входной и выходной слой, af- функция активации от 1-го скрытого слоя к выходному слою (по умолчанию - логистическая функция активации «ann_log_activ»), lr - это скорость обучения, itermax - максимальное время обучения (максимальное количество эпох (циклов) для обучения), mse_min - минимальная ошибка (задача) и gd_min - минимальный градиент для остановки обучения.

В примере будем использовать первые 3 обязательных значений, другие поля оставляем пустыми, значения будут использоваться по умолчанию. Для использования обученной нейронной сети будет использовать функцию «ann_FFBP_run» (рис. 15).

Далее выбираем для запуска обучения пункт меню Выполнить. На экране появится окно Neural Network Training, это окно показывает, что обучение длится 1000 эпох (циклов), среднеквадратичную ошибку (mse), минимальный градиент для остановки обучения (рис.16).

Рис.15. Обучение сети с помощью функции «ann_FFBP_gd»

Рис.16. Окно Neural Network Training

 

После завершения обучения результат можно просмотреть в главном окне программы (рис.17).

Теперь используем обученную нейронную сеть с помощью функции «ann_FFBP_run». Синтаксис:

y = ann_FFBP_run(x, N, W [, l, af])

x - матрица входных параметров; N - вектор строки, описывающий количество нейронов в слое; W - гиперматрица весов входов (инициализировать через ann_FF_init); l - определяет входной слой и выходной слой .x (вводятся в слой l(1) как исходящий из слоя l(1) – 1), y выходы собираются из выходов уровня l(2).Этот параметр необязателен, значение по умолчанию [2,size(N,'c')], т.е. вся сеть; af - имя функции активации. Этот параметр является необязательным, значение по умолчанию "ann_log_activ", т.е. логистическая функция активации.

Рис. 17. Результат обучения нейронной сети в Scilab

Обученную нейронную сеть проверим на примере сложения двух чисел (2;5) (рис.18)

Рис.18. Реализация сложения двух чисел с помощью обученной нейронной сети в Scilab

 

В результате работы была реализована модель операции сложения в программе SciLab с инструментарием artificial neural networks и neural network training. Нейронные сети данного типа часто применяются для решения самых различных задач, от восстановления пропусков в данных до анализа данных и поиска закономерностей, например, в финансовой сфере.

Пример 31. С помощью ANN для Scilab создать искусственную нейронную сеть для классификации объектов. В нейронной сети образец изучается на примере. Процесс обучения может занять некоторое время, но как только шаблон выучен, ожидается более быстрый процесс распознавания. Существует два класса объектов, A и B, которые должны быть классифицированы на основе двух признаков. Используемый код показан ниже. Обратите внимание, что входная обучающая матрица x состоит из 12 строк с 2 столбцами, поскольку существует 12 объектов, которые необходимо классифицировать на основе 2 признаков. Требуемый вывод t представляет класс объекта, классифицированного так, что значение, равное 1, означает класс A, а значение, равное 0, означает класс B. Обратите внимание, что значения для обоих наборов функций нормализованы.

//возвращает матрицу случайных чисел в одну и ту же отправную точку

rand('seed',0);

//сеть def.

//число нейронов на слой, включая входные (архитектура сети)

//2 нейрона во входном слое, 2 в скрытом слое и 1 в выходном слое

N = [2,2,1];

 

//входная обучающая матрица x

х = [0.8900, 0.7916;

0.8544, 0.7470;

0.8482, 0.7297;

1.0000, 1.0000;

0.0411, 0.0746;

0.0380, 0.0240;

0.0247, 0.0190;

0.0193, 0.0102;

0.0086, 0.0053;

0.0061, 0.0026;

0.0044, 0.0009;

0.0000. 0.0000]’;

//целевые (выходные) параметры: 1 для класса A и 0 для класса B

t = [1 1 1 1 0 0 0 0 0 0 0 0];

//скорость обучения и порог допустимой сетью ошибки

lp = [0.1,0];

W = ann_FF_init(N);

//тренировочный цикл, число итераций (циклов)

T = 400;

W = ann_FF_Std_online(x,t,N,W,lp,T);

//x – обучающая матрица, t – выходные параметры,

//W – матрица весов, N – архитектура сети,

//lp - скорость обучения и T - число итераций

 

//полный прогон

ann_FF_run(x,N,W)

//сеть N тестировалась с использованием x в качестве тестового набора,и W в качестве весов соединений

Результат распознавания созданной сетью показан на рис.19.

Рис.19. Результат распознавания чисел при скорости обучения = [0,1, 0], Т = 400

 

Параметры скорости обучения и тренировочных циклов могут быть изменены. Результаты для различных комбинаций значений скорости обучения и циклов обучения показаны на рис.20-22.

Рис.20. Результат распознавания чисел при скорости обучения = [2,5, 0], Т = 400

Рис.21. Результат распознавания чисел при скорости обучения = [0,1, 0], T = 1000

 

Рис.22. Результат распознавания чисел при скорости обучения = [2,5, 0], T = 1000

 

 

Из результатов видно, что чем выше скорость обучения, тем ближе получаемые значения для выхода. Кроме того, увеличение количества тренировочных циклов приводит к значениям для выхода, которые ближе к желаемым. Оказывается, что предсказания нейронной сети сделаны на 100% точными.

В программе использовались следующие функции ANN.

1) W = ann_FF_init(N);

Эта функция создает гиперматрицу весов согласно описанию сети N.

Синтаксис:

W = ann_FF_init(N [, r, rb]),

где N - вектор строки, описывающий количество нейронов в слое. N(1) - размер входного слоя, N(size(N,'c')) - размер вектора выходного слоя (а также цели); r - двухкомпонентный вектор строк, определяющий наименьшее и наибольшее значение для создания. Веса создается случайными числами между этими двумя значениями: r(1) - нижний предел, r(2) - верхний предел. Это необязательный параметр, значение по умолчанию - [-1,1]; rb - то же самое, что и r, но для смещения. Этот параметр является необязательным, значение по умолчанию [0,0], т.е. смещение инициализировано до нуля; W - гиперматрица весов, формат, используемый ann_FF_Std, ann_BP_run и всеми остальными функциями для сетей прямого распространения ошибки (со смещением).

2) W = ann_FF_Std_online(x,t,N,W,lp,T);

Эта функция возвращает обновленную весовую гиперматрицу ANN алгоритма с  обратным распространением ошибки после онлайн-тренировки с заданным набор шаблонов. Используемый алгоритм является стандартным онлайн-обратным.

Синтаксис:

W = ann_BP_Std_online(x, t, N, W, lp, T [, af, ex])

где x - матрица входных параметров; t - матрица целей (входных параметров); N - вектор строки, описывающий количество нейронов в слое; W - гиперматрица весов входов (инициализировать через ann_FF_init); lp - параметры обучения [lp(1), lp(2)] (lp(1) - параметр обучения стандартного алгоритма обратного распространения ошибки; lp(2) - определяет порог ошибки); T - количество эпох (тренировочных циклов или итераций); af - активационная функция и ее производная: af(1) - имя функции активации, af(2) название производной. Этот параметр не обязателен, его значение по умолчанию - ['ann_log_activ', 'ann_d_log_activ'], т.е. логистическая функция активации и ее производная; ex - двумерный вектор, представляющих допустимые последовательности Scilab (ex(1) выполняется после обновления гиперматрицы веса, после каждого шаблона (не целый набор), используя execstr; ex(2), как и ex(1), но выполняется после каждой эпохи(цикла)). Этот параметр является необязательным, по умолчанию значение [" "," "]  (ничего не делать).

3) W = ann_FF_run(x,N,W) описывалась ранее, в примере 30.

 

 


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

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






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