Использование Neural Network Fitting Tool

В задаче приближения функций[2] (Fitting Functions) известны значения функции в некоторых точках (узлах интерполяции)

Использование Neural Network Fitting Tool - student2.ru

Необходимо построить нейронную сеть, позволяющую находить значение функции в произвольной точке Использование Neural Network Fitting Tool - student2.ru . При этом знание аналитического выражения для функции не является обязательным.

Работа с графическим инструментом аналогична работе при решении задач классификации и распознавания образов. Для запуска графического инструмента пакета Neural Networks Toolbox [8] в командном окне задаем команду:

>> nnstart

В появившемся стартовом окне (рис. 2.27) выбираем кнопку Fitting app (Приложение приближения функций) и появляется окно приглашения 2.28. Можно сразу открыть окно приглашения, минуя стартовое окно, если задать команду

>> nftool

Можно на вкладке APPS MATLAB выбрать кнопку Использование Neural Network Fitting Tool - student2.ru — Neural Net Fitting.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.27. Стартовое окно

В окне приглашения указывается, что будет использована двухслойная однонаправленная сеть с сигмоидальной функцией активации нейронов скрытого слоя нейронов и линейной функцией активации нейронов выходного слоя (создается функцией fitnet). Такая сеть позволяет сколь угодно точно решать задачи многомерной аппроксимации при условии согласованности данных и достаточном количестве нейронов в скрытом слое. Сеть будет обучаться методом обратного распространения ошибки с использование алгоритма Левенберга-Марквардта (функция trainlm). В случае недостаточного объема памяти будет использоваться масштабируемый алгоритм сопряженных градиентов (функция trainscg).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.28. Окно приглашения

В окне приглашения нажимаем Next и открываем окно выбора данных Select Data window (рис. 2.29).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.29. Окно выбора данных

Кнопки Использование Neural Network Fitting Tool - student2.ru позволяет выбрать файлы входных и целевых (выходных) данных для обучения. С помощью радиокнопок можно выбрать являются ли образцы (Samples are) столбцами матрицы (Matrix columns) или строками матрицы (Matrix rows). Кнопка Load Example Data Set позволяет выбрать готовые демонстрационные примеры. Выбираем эту кнопку. Открывается окно выбора набора данных распознавания Pattern Recognition a Data Set Chooser (рис. 2.30).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.30. Окно выбора набора данных

При решении задачи приближения данных доступны следующие наборы данных (все имеющиеся наборы данных можно просмотреть командой help nndatasets):

- Simplefit Dataset — Простой набор данных.

- House Dataset — Оценка средней цены дома.

- Abalone Dataset—Подсчет колец раковины моллюска морское ушко.

- Bodyfat Dataset — Оценка процентного содержания жира в организме.

- Building Dataset — Энергопотребление здания в зависимости от времени и погодных условий.

- Chemical Dataset – Оценка сигнала датчика по сигналам восьми других датчиков.

- Engine Dataset — Оценка крутящего момента и выбросов двигатели от использованного топлива и скорости.

В правой половине окна (Description) приводится описание каждого набора данных и источник, откуда взяты данные. Выберем простой набор данных simplefit_dataset. Пользуясь описанием этого набора, узнаем, что набор содержит 67 значений аргумента и функции. Набор загружается функцией simplefit_dataset. На рис. рис. 2.31 показан график аппроксимируемой функции, полученный следующей последовательностью команд:

>> [x,t] = simplefit_dataset;

>> plot(x,t)

>> plot(x,t,'o')

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.31. График аппроксимируемой функции

Выбрав Simplefit Dataset , нажимаем кнопку Import. Происходит возврат в окно Select Data (рис. 2.29) и можно изменить выбор набора данных. Если не надо изменять набор, то нажимаем кнопку Next и переходим в окно Validation and Test Data window(рис. 2.32), которое определяет распределение набора данных между обучающим набором (Training), проверочным набором (Validation), которое используются, чтобы оценить обобщающие свойства сети и остановить обучение, когда обобщение прекращает улучшаться и тестовым множеством (Testing), не оказывающим влияния на обучение, но служащим для проверки качества обучения на данных, которые не использовались в обучении сети.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.32. Окно Validation and Test Data

Оставим распределение данных без изменения и нажмем кнопку Next. Попадаем в окно архитектуры сети Network Architecture (рис. 2.33).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.33. Окно архитектуры сети

Стандартная сеть, которая используется для аппроксимации, является сетью прямого распространения с двумя слоями и с сигмоидальной функцией активации в первом слое и линейной функцией активации в выходном слое. По умолчания число нейронов в скрытом слое равно 10 (это число можно изменить, задавая параметр Number Hidden Neurons). Число нейронов выходного слоя равно 1.

Оставляем параметры сети без изменения и нажимаем кнопку Next. В результате переходим к окну обучения сети Train Network (рис. 2.34).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.34. Окно обучения сети

В окне обучения сети из выпадающего списка можно выбрать алгоритм обучения. По умолчанию предлагается алгоритм Левенберга‑Марквардта (Levenberg‑Marquard). Можно выбрать алгоритм Байесовской регуляризации (Bayesian Regularization), масштабируемый алгоритм сопряженных градиентов (Scaled Conjugate Gradient). Ниже окна выбора алгоритма при этом выводится краткая характеристика алгоритма.

Принимаем в качестве алгоритма обучения алгоритм Левенберга‑Маквардта и нажимаем кнопку Train (Обучение) и переходим в окно процесса обучения сети Neural Network Training (рис. 2.35). Одновременно снова появляется окно обучения сети (рис. 2.36). Теперь в этом окне выводятся результаты обучения: для обучающего, проверочного и тестового множеств выводятся среднеквадратическая ошибка (MSE) и значение коэффициента корреляции (R) между выходами сети и целевыми значениями. Из этого окна можно вывести графики, характеризующие качество обучения. Можно повторить обучение (кнопка Retrain), используя другой алгоритм обучения.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.35. Окно процесса обучения сети

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.36. Вид окно обучения сети после завершения обучения

В окне процесса обучения сети по кнопке Performance можно увидеть график обучения сети (рис. 2.37), показывающий поведение ошибки обучения. Из графика видно, что за 13 эпох достигнуто значение среднеквадратической ошибки Использование Neural Network Fitting Tool - student2.ru . Функция обучения использует в качестве средства борьбы с переобучением обучение с ранним остановом (early stopping). Из графика видно, что обучение остановлено, когда ошибка на проверочном множестве перестала уменьшаться.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.37. График обучения сети

Графики состояния обучения – Training State показаны на рис. 2.38.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.38. Графики состояния обучения

На графике val failпоказано изменениеошибка на контрольном множестве. Видно, что после эпохи 13 ошибка начинает расти. График gradient показывает изменение градиента функционала ошибки обучения по весам сети. График mu отражает изменение параметра обучения Использование Neural Network Fitting Tool - student2.ru метода Левенберга‑Марквардта (в других методах отражаются другие параметры).

Гистограмма ошибок Error Histogram (рис. 2.39) показывает, на каком числе примеров (Instances) сеть дает ту или иную погрешность. Погрешность вычисляется как разность целевым значением и выходом сети. На графике отображаются погрешности для обучающего, проверочного и тестового множеств.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.39. Гистограмма ошибок

Из гистограммы рис. 2.39 видно, что большинство ошибок лежит в диапазоне от -0,01993 до 0,01647. Имеется небольшое количество ошибок, превышающих эти значения. В частности, на двух примерах тестового множества ошибка достигает 0,03831.

График Regressionпоказывает линейную регрессию результатов обучения сети на трех рассмотренных подмножествах и на всех множествах. Для каждого результата рассчитывается коэффициент корреляции Использование Neural Network Fitting Tool - student2.ru , строится график и выводится уравнение регрессии в виде Использование Neural Network Fitting Tool - student2.ru (рис. 2.40). При полном совпадении выходов сети с целевыми значениями Использование Neural Network Fitting Tool - student2.ru . Из рис. 2.40 видно, что сеть практически идеально аппроксимирует функцию.

Функция аппроксимации Fit (рис. 2.41) показывает значения ошибок сети при различных входных значениях. На графике видно, при каких входных значениях получаются большие ошибки. Необходимо проанализировать входные данные. Возможно, что большим ошибкам соответствуют выбросы в данных.

Так как результаты обучения получились удовлетворительные, нажимаем кнопку Next в окне обучения сети после завершения обучения (рис. 2.36). Появляется окно оценки сети (Evaluate Network) (рис. 2.42).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.40. Регрессия

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.41. Функция аппроксимации

Левая часть окна предлагает повторить для улучшения производительности (Iterate for improved performance):

- обучение (кнопка Train Again), если первая попытка не дала удовлетворительных результатов или если требуется улучшение результатов;

- увеличить размер сети — по кнопке Adjust Network Sizeпроисходит переход к окну выбора архитектуры сети (рис. 2.33);

- использовать бо́льший набор данных — по кнопке Import Larger Data Set происходит переход к окну выбора данных (рис. 2.30).

В правой части окна предлагается провести дополнительные испытания (Optionally perform additonal tests), выбрав входные и целевые значения.

Для завершения работы с сетью нажимаем на кнопку Next и переходим в окно Deploy Solution развертывания (размещения) решения (рис. 2.43).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.42. Окно оценки сети

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.43. Окно развертывания решения

В этом окне можно сгенерировать функции для MATLAB Compiler, позволяющего создавать независимые приложения (.exe), компоненты и библиотеки (.dll), и для MATLAB Builder — для создания пакетов, расширяющих возможности MATLAB Compiler средствами генерации компонентов различных фреймворков, например, Microsoft .NET Framework. Возможна генерация функции для MATLAB Coder, генерирующего автономный C и C++ код из кода MATLAB. Возможно моделирование сети в системе Simulink и генерация графической диаграммы сети как в окне архитектуры сети (рис. 2.33).

В последнем окне — окне сохранения результатов (рис. 2.44) можно сохранить результаты, сгенерировать программу, воспроизводящую создание сети.

Нажав кнопку Simple Script или Advanced Script можно сгенерировать простой или усовершенствованный код MATLAB, воспроизводящий действия Neural Network Pattern Recognition Tool. Усовершенствованный код отличается более детальным заданием параметров функций. В простом коде многие параметры устанавливаются по умолчанию.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.44. Окно сохранения результатов

Можно сохранить отмеченные результаты в рабочем пространстве MATLAB. При этом рекомендуется заменить имена, присеваемые по умолчанию, на свои имена.

Для завершения работы с пакетом Neural Networks Toolbox необходимо нажать кнопку Finishв окне сохранения результатов.

Задания

1. Проделайте все примеры, приведенные в работе.

2. Решите задачу распознавания образов для одного из указанных преподавателем тестовых наборов данных, имеющихся в MATLAB. Проанализируйте полученные результаты.

3. Исследуйте влияние структуры сети и алгоритмов обучения на точность распознавания и число циклов обучения.

Использование команд

Сгенерированные в окне сохранения результатов (рис. 2.44) код появляется в окне редактора и может редактироваться и сохраняться. Простой код (Simple Script) и усовершенствованный код (Advanced Script) сохранены в библиотеке Samples примеров лабораторного практикума под именами fitting_simple.m и fitting_advanced.m. Программа fitting_simple_rus.m содержит переведенные на русский язык комментарии и необходимые дополнения (сгенерированная программа fitting_simple.m требует предварительной загрузки в рабочее пространство исходных данных):

% Решение задачи приближения данных с помощью нейронной сети

% Скрипт сгенерирован приложением Neural Fitting

% с некоторыми дополнениями

% Created Sun Apr 20 14:23:32 GMT+04:00 2014

%

% Этот сценарий предполагает, что эти переменные определены:

%

% simplefitInputs - input data.

% simplefitTargets - target data.

% x = simplefitInputs;

% t = simplefitTargets;

% Добавлены закрытия окон и очистка

close all

clc

clear

% Вызов функции загрузки исходных данных

% В сгенерированной программе отсутствует, т.к. предполагается, что

% данные уже помещены в рабочее пространство

[x,t] = simplefit_dataset;

% Выберите функцию обучения

% Для получения списка всех функций обучения выполните: help nntrain

%'trainlm', как правило, самая быстрая.

% 'trainbr' требует больше времени, но может быть лучше для сложных задач.

% 'trainscg' требует меньше памяти. NFTOOL применяет при нехватке памяти.

trainFcn = 'trainlm'; % функция Левеберга-Марквардта

% Создание сети аппроксимации функций

hiddenLayerSize = 10; % Размер скрытого слоя

net = fitnet(hiddenLayerSize,trainFcn); % Создание сети net

% Настройка деления данных на обучающие, проверочные и тестовые

net.divideParam.trainRatio = 70/100; % Обучающие данные

net.divideParam.valRatio = 15/100; % Проверочные данные

net.divideParam.testRatio = 15/100; % Тестовые данные

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

[net,tr] = train(net,x,t);

% Тестирование сети

y = net(x); % Моделирование работы сети

e = gsubtract(t,y); % Вычисление ошибки сети: массива t-y

% Вычисление достигнутой среднеквадратической ошибки

performance = perform(net,t,y)

% Вывод структуры сети

view(net)

% Графики

% Раскомментируйте строки, чтобы включит различные графики

% Графики могут быть построены из окна обучения сети

% График обучения сети

%figure, plottrainstate(tr)

% График аппроксимации

%figure, plotfit(net,x,t)

% График регрессии

%figure, plotregression(t,y)

% Гистограммы ошибок

%figure, ploterrhist(e)

В программе fitting_simple_rus.m добавлен вызов функции загрузки исходных данных [x,t]=simplefit_dataset.В сгенерированной программе этот вызов отсутствует, т. к. предполагается, что все исходные данные уже загружены в рабочее пространство.

Сеть распознавания образов создается функцией fitnet, обращение к которой имеет вид

fitnet(hiddenSizes,trainFcn),

где hiddenSizes— вектор‑строка, содержащая число нейронов в каждом скрытом слое. По умолчанию параметр равен10, что означает один скрытый слой с 10 нейронами. Один скрытый слой обычно дает хорошие результаты, но можно попробовать два скрытых слоя, если результаты с одним слоем не являются адекватными. trainFcn— имя функции обучения (по умолчанию trainlm— алгоритм Левенберга‑Марквардта). Функция активации по умолчанию для скрытых слоев tansig (гиперболический тангенс) и для выходного слоя purelin (линейная функция).

Если необходимо построить сеть с другим количеством скрытых слоев и нейронов, например, с двумя скрытыми слоями, размерности 10 и 5, то следует вызвать функцию в виде net=fitnet([10,5]).

В объекте Neural Network, созданном с помощью функции fitnet, не установлены размеры входных и выходных слоев сети, параметры пред- и постобработки и проведена инициализация весов и смещений. Эти параметры устанавливаются с помощью функции конфигурирования configure. Проще всего использовать функцию configure виде:

net = configure(net,x,t),

где net — имя созданной сети, x — имя входного массива, t — имя массива целевых значений.

Можно не выполнять этап конфигурирования. Команда обучения train автоматически настроит и инициализирует сеть. Функция configure полезна, если необходимо заново инициализировать сеть или провести пользовательскую инициализацию.

Проиллюстрируем создание и конфигурирование нейронной сети:

>> net=fitnet;

>> view(net);

Структура сети показана на рис. 2.45.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.45. Структура сети до конфигурирования

Произведем конфигурирование сети и выведем структуру сконфигурированной сети:

>> net=configure(net,x,t);

>> view(net);

Структура сконфигурированной сети показана на рис. 2.46. Изменения в настройках сети можно увидеть, рассматривая объект net.

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.46. Структура сконфигурированной сети

Функция fitnet не позволяет изменять функции активации. Функции активации можно изменить в созданном объекте Neural Network.Например, изменим функцию активации второго (выходного) слоя на гиперболический тангенс:

>> net.layers{2}.transferFcn='tansig';

>> view(net);

Изменение функции активации отражено на структуре сети (рис. 2.47).

Использование Neural Network Fitting Tool - student2.ru

Рис. 2.47. Структура сети после изменения функции активации

Функция fitnet создания сети аппроксимации функций является специальной версией функции feedforwardnet создания сетей прямого распространения. Функции patternnet создания сети распознавания образов и cascadeforwardnet создания каскадной сети также являются специальными версиями функции feedforwardnet. Поэтому в программе можно использовать функцию feedforwardnet, обращение к которой не отличается от обращения к функции fitnet.

Сгенерированная программа fitting_advanced.m имеет вид:

% Solve an Input-Output Fitting problem with a Neural Network

% Script generated by Neural Fitting app

% Created Sun Apr 20 14:26:06 GMT+04:00 2014

%

% This script assumes these variables are defined:

%

% simplefitInputs - input data.

% simplefitTargets - target data.

x = simplefitInputs;

t = simplefitTargets;

% Choose a Training Function

% For a list of all training functions type: help nntrain

% 'trainlm' is usually fastest.

% 'trainbr' takes longer but may be better for challenging problems.

% 'trainscg' uses less memory. NFTOOL falls back to this in low memory situations.

trainFcn = 'trainlm'; % Levenberg-Marquardt

% Create a Fitting Network

hiddenLayerSize = 10;

net = fitnet(hiddenLayerSize,trainFcn);

% Choose Input and Output Pre/Post-Processing Functions

% For a list of all processing functions type: help nnprocess

net.input.processFcns = {'removeconstantrows','mapminmax'};

net.output.processFcns = {'removeconstantrows','mapminmax'};

% Setup Division of Data for Training, Validation, Testing

% For a list of all data division functions type: help nndivide

net.divideFcn = 'dividerand'; % Divide data randomly

net.divideMode = 'sample'; % Divide up every sample

net.divideParam.trainRatio = 70/100;

net.divideParam.valRatio = 15/100;

net.divideParam.testRatio = 15/100;

% Choose a Performance Function

% For a list of all performance functions type: help nnperformance

net.performFcn = 'mse'; % Mean squared error

% Choose Plot Functions

% For a list of all plot functions type: help nnplot

net.plotFcns = {'plotperform','plottrainstate','ploterrhist', ...

'plotregression', 'plotfit'};

% Train the Network

[net,tr] = train(net,x,t);

% Test the Network

y = net(x);

e = gsubtract(t,y);

performance = perform(net,t,y)

% Recalculate Training, Validation and Test Performance

trainTargets = t .* tr.trainMask{1};

valTargets = t .* tr.valMask{1};

testTargets = t .* tr.testMask{1};

trainPerformance = perform(net,trainTargets,y)

valPerformance = perform(net,valTargets,y)

testPerformance = perform(net,testTargets,y)

% View the Network

view(net)

% Plots

% Uncomment these lines to enable various plots.

%figure, plotperform(tr)

%figure, plottrainstate(tr)

%figure, plotfit(net,x,t)

%figure, plotregression(t,y)

%figure, ploterrhist(e)

% Deployment

% Change the (false) values to (true) to enable the following code blocks.

if (false)

% Generate MATLAB function for neural network for application deployment

% in MATLAB scripts or with MATLAB Compiler and Builder tools, or simply

% to examine the calculations your trained neural network performs.

genFunction(net,'myNeuralNetworkFunction');

y = myNeuralNetworkFunction(x);

end

if (false)

% Generate a matrix-only MATLAB function for neural network code

% generation with MATLAB Coder tools.

genFunction(net,'myNeuralNetworkFunction','MatrixOnly','yes');

y = myNeuralNetworkFunction(x);

end

if (false)

% Generate a Simulink diagram for simulation or deployment with.

% Simulink Coder tools.

gensim(net);

end

Программа также требует загрузки исходных данных. В программе явно задаются параметры сети, включая функции пред- и постобработки. Этими функциями являются:

fixunknowns — заполняет пропуски данных средними значениями.

mapminmax— масштабирует данные к диапазону [-1, +1].

mapstd— преобразование данных каждой строки матрицы к нулевому среднему значению и единичному стандартному отклонению.

processpca — вычисление главных компонент строк матриц.

removeconstantrows — удаление строк, содержащих постоянные значения.

removerows — удаление строк матриц с заданными индексами.

Чтобы посмотреть и изменить функции предобработки слоя Использование Neural Network Fitting Tool - student2.ru используйте свойства входов Использование Neural Network Fitting Tool - student2.ru ‑го слоя сети

net.inputs{i}.processFcns

Чтобы посмотреть и изменить функции постдобработки слоя Использование Neural Network Fitting Tool - student2.ru используйте свойства выходов Использование Neural Network Fitting Tool - student2.ru ‑го слоя сети

net.outputs{i}.processParams

Для многослойных сетей заданные по умолчанию функции обработки ввода — removeconstantrows и mapminmax. Для выходов сети значения по умолчанию также removeconstantrows и mapminmax. В большинстве случаев нет необходимости использовать непосредственно функции пред- и постобработки, так как они являются частью объекта Neural Network и выполняются автоматически.

В программе fitting_advanced задаются параметры обучения. В частности, в качестве функции ошибки задается среднеквадратическая ошибка net.performFcn='mse' (эта функция задается по умолчанию). Задается также список графиков, выводимых при обучении сети:

net.plotFcns={'plotperform','plottrainstate','ploterrhist', ...

'plotregression', 'plotfit'};

В программу можно добавить дополнительные параметры обучения. В свойствах объекта Neural Network до обучения мож­но установить параметры обучения, например, точность обучения и предельное число эпох

net.trainParam.goal=1e-5;

net.trainParam.epochs=300;

Можно изменить число эпох, при котором на контрольном множестве погрешность не уменьшается, и процесс обучения останавливается (задается параметром net.trainParam.max_fail— по умолчанию 6). Можно задать минимальное значение компонентов вектора градиента, при котором останавливается обучение (по умолчанию net.trainParam.min_grad=1.0000e-010). Обучать сеть градиентным методом при малом градиенте нет смысла.

Полный перечень параметров обучения можно увидеть по команде

>>net.trainParam,

где net — имя сети.

В программе net1_advanced.m также присутствует генерация функций для MATLAB Builder и Coder.

Задания

1. Постройте и исследуйте нейронные сети, аппроксимирующие функции многих переменных. Во всех вариантах Использование Neural Network Fitting Tool - student2.ru :

а) Использование Neural Network Fitting Tool - student2.ru б) Использование Neural Network Fitting Tool - student2.ru
в) Использование Neural Network Fitting Tool - student2.ru д) Использование Neural Network Fitting Tool - student2.ru
е) Использование Neural Network Fitting Tool - student2.ru ж) Использование Neural Network Fitting Tool - student2.ru

2. Исследуйте сети с различным числом слоев и числом нейронов в слое, с различным числом обучающих примеров. Исследуйте обучение сети при использовании различных градиентных алгоритмов. Обратите внимание на графики окна состояния обучения.

СЕТИ И КАРТЫ КОХОНЕНА

Сети Кохонена

Наши рекомендации