Подходящие данные с мелкой нейронной сетью

Нейронные сети способны соответствовать функциям. На самом деле существует доказательство, что довольно простая нейронная сеть может соответствовать любой практической функции.

Предположим, например, что у вас есть данные медицинской клиники. Вы хотите спроектировать сеть, которая может предсказать процент жировой прослойки человека, учитывая 13 анатомических измерений. У вас есть в общей сложности 252 человека в качестве примера, для которых у вас есть те 13 элементов данных и их связанные проценты жировой прослойки.

Можно решить эту задачу двумя способами:

Обычно лучше запуститься с приложения, и затем использовать приложение, чтобы автоматически сгенерировать скрипты командной строки. Перед использованием любого метода сначала опишите задачу путем выбора набора данных. Каждое из приложений нейронной сети имеет доступ ко многим наборам выборочных данных, которые можно использовать, чтобы экспериментировать с тулбоксом (см. Наборы Выборочных данных для Мелких Нейронных сетей). Если у вас есть определенная задача, которую вы хотите решить, можно загрузить собственные данные в рабочую область. Следующий раздел описывает формат данных.

Совет

Чтобы в интерактивном режиме создать и обучить глубокие сети, используйте Deep Network Designer.

Постановка задачи

Чтобы задать подходящее (регрессия) проблема для тулбокса, расположите набор входных векторов (предикторы) как столбцы в матрице. Затем расположите набор ответов (правильные выходные векторы для каждого из входных векторов) во вторую матрицу. Например, можно описать задачу регрессии с четырьмя наблюдениями, каждого с двумя входными функциями и одним ответом, можно следующим образом:

predictors = [0 1 0 1; 0 0 1 1];
responses = [0 0 0 1];

Следующий раздел показывает, как обучить сеть, чтобы соответствовать набору данных, с помощью приложения Neural Net Fitting. Этот пример использует набор данных в качестве примера, которому предоставляют тулбокс.

Подходящие данные Используя приложение Neural Net Fitting

В этом примере показано, как обучить мелкую нейронную сеть, чтобы соответствовать данным с помощью приложения Neural Net Fitting.

Откройте приложение Neural Net Fitting с помощью nftool.

nftool

Выберите Data

Приложение Neural Net Fitting имеет данные в качестве примера, чтобы помочь вам начать обучать нейронную сеть.

Чтобы импортировать данные о жировой прослойке в качестве примера, выберите Import> Import Body Fat Data Set. Можно использовать этот набор данных, чтобы обучить нейронную сеть, чтобы оценить жировую прослойку кого-то от различных измерений. Если вы импортируете свои собственные данные из файла или рабочей области, необходимо задать предикторы и ответы, и если наблюдения находятся в строках или столбцах.

Информация об импортированных данных появляется в Сводных данных Модели. Этот набор данных содержит 252 наблюдения, каждого с 13 функциями. Ответы содержат содержание жира в организме для каждого наблюдения.

Разделите данные в обучение, валидацию и наборы тестов. Сохраните настройки по умолчанию. Данные разделены в:

  • 70% для обучения.

  • 15%, чтобы подтвердить это сеть делают вывод и остановить обучение перед сверхподбором кривой.

  • 15%, чтобы независимо протестировать сетевое обобщение.

Для получения дополнительной информации о делении данных смотрите, Делят Данные для Оптимального Обучения Нейронной сети.

Создайте сеть

Сеть является 2-х слойной сетью прямого распространения с сигмоидальной передаточной функцией в скрытом слое и линейной передаточной функцией в выходном слое. Значение размера Слоя задает количество скрытых нейронов. Сохраните размер слоя по умолчанию, 10. Вы видите сетевую архитектуру в Сетевой панели. Сетевой график обновляется, чтобы отразить входные данные. В этом примере данные имеют 13 входных параметров (функции) и один выход.

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

Чтобы обучить сеть, выберите Train> Train with Levenberg-Marquardt. Это - алгоритм настройки по умолчанию и то же самое как нажатие Train.

Обучение с Levenberg-Marquardt (trainlm) рекомендуется для большинства проблем. Для шумных или небольших проблем, Байесова Регуляризация (trainbr) может получить лучшее решение, за счет занимания больше времени. Для больших проблем, Масштабированный Метод сопряженных градиентов (trainscg) рекомендуется, когда это использует вычисления градиента, которые используют память более эффективно, чем вычисления Якобиана другие два использования алгоритмов.

В Учебной панели вы видите процесс обучения. Обучение продолжается, пока одному из критерия остановки не соответствуют. В этом примере продолжается обучение, пока ошибка валидации не увеличивается последовательно для шести итераций ("Соответствовал критерию валидации").

Анализ результатов

Сводные данные Модели содержат информацию об алгоритме настройки и учебных результатах для каждого набора данных.

Можно далее анализировать результаты путем генерации графиков. Чтобы построить линейную регрессию, в разделе Plots, нажимают Regression. График регрессии отображает сетевые предсказания (выход) относительно ответов (цель) для обучения, валидации и наборов тестов.

Для совершенной подгонки данные должны упасть вдоль 45 линий степени, где сетевые выходные параметры равны ответам. Для этой проблемы подгонка довольно хороша для всех наборов данных. Если вы требуете более точных результатов, можно переобучить сеть путем нажатия на Train снова. Каждое обучение будет иметь различные начальные веса и смещения сети, и может произвести улучшенную сеть после переобучения.

Просмотрите ошибочную гистограмму, чтобы получить дополнительную верификацию производительности сети. В разделе Plots нажмите Error Histogram.

Синие панели представляют обучающие данные, зеленые панели представляют данные о валидации, и красные панели представляют данные о тестировании. Гистограмма обеспечивает индикацию относительно выбросов, которые являются точками данных, где подгонка значительно хуже, чем большинство данных. Это - хорошая идея проверять выбросы, чтобы определить, плохи ли данные, или если те точки данных отличаются, чем остальная часть набора данных. Если выбросы являются допустимыми точками данных, но непохожи на остальную часть данных, то сеть экстраполирует для этих точек. Необходимо собрать больше данных, которые похожи на точки выброса, и переобучите сеть.

Если вы недовольны производительностью сети, можно выполнить одно из следующих действий:

  • Обучите сеть снова.

  • Увеличьте число скрытых нейронов.

  • Используйте больший обучающий набор данных.

Если эффективность на наборе обучающих данных хороша, но эффективность набора тестов плоха, это могло бы указать, что модель сверхсоответствует. Сокращение количества нейронов может уменьшать сверхподбор кривой.

Можно также оценить производительность сети на дополнительном наборе тестов. Чтобы загрузить дополнительные тестовые данные, чтобы оценить сеть с, в Экспериментальном участке, нажимают Test. Сводные данные Модели отображают дополнительные результаты испытаний. Можно также сгенерировать графики анализировать дополнительные результаты тестовых данных.

Сгенерируйте код

Выберите Generate Code> Generate Simple Training Script, чтобы создать код MATLAB, чтобы воспроизвести предыдущие шаги от командной строки. Создание кода MATLAB может быть полезным, если вы хотите изучить, как использовать функциональность командной строки тулбокса, чтобы настроить учебный процесс. В Подходящих Данных Используя Функции Командной строки вы исследуете сгенерированные скрипты более подробно.

Сеть экспорта

Можно экспортировать обучивший сеть в рабочую область или Simulink®. Можно также развернуть сеть с инструментами MATLAB Compiler™ и другими инструментами генерации кода MATLAB. Чтобы экспортировать ваш обучивший сеть и результаты, выберите Export Model> Export to Workspace.

Подходящие данные Используя функции командной строки

Самый легкий способ изучить, как использовать функциональность командной строки тулбокса, состоит в том, чтобы сгенерировать скрипты из приложений, и затем изменить их, чтобы настроить сетевое обучение. Как пример, посмотрите на простой скрипт, который был создан в предыдущем разделе с помощью приложения Neural Net Fitting.

% Solve an Input-Output Fitting problem with a Neural Network
% Script generated by Neural Fitting app
% Created 15-Mar-2021 10:48:13
%
% This script assumes these variables are defined:
%
%   bodyfatInputs - input data.
%   bodyfatTargets - target data.

x = bodyfatInputs;
t = bodyfatTargets;

% 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. Suitable in low memory situations.
trainFcn = 'trainlm';  % Levenberg-Marquardt backpropagation.

% Create a Fitting Network
hiddenLayerSize = 10;
net = fitnet(hiddenLayerSize,trainFcn);

% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% Train the Network
[net,tr] = train(net,x,t);

% Test the Network
y = net(x);
e = gsubtract(t,y);
performance = perform(net,t,y)

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotregression(t,y)
%figure, plotfit(net,x,t)

Можно сохранить скрипт и затем запустить его из командной строки, чтобы воспроизвести результаты предыдущего сеанса обучения. Можно также отредактировать скрипт, чтобы настроить учебный процесс. В этом случае выполните каждый шаг в скрипте.

Выберите Data

Скрипт принимает, что предиктор и векторы отклика уже загружаются в рабочую область. Если данные не загружаются, можно загрузить их можно следующим образом:

load bodyfat_dataset

Эта команда загружает предикторы bodyfatInputs и ответы bodyfatTargets в рабочую область.

Этот набор данных является одним из наборов выборочных данных, который является частью тулбокса. Для получения информации о доступных наборах данных смотрите Наборы Выборочных данных для Мелких Нейронных сетей. Можно также видеть список всех доступных наборов данных путем ввода команды help nndatasets. Можно загрузить переменные из любого из этих наборов данных с помощью собственных имен переменных. Например, команда

[x,t] = bodyfat_dataset;

загрузит предикторы жировой прослойки в массив x и ответы жировой прослойки в массив t.

Выберите Training Algorithm

Выберите алгоритм настройки. Сеть использует алгоритм Levenberg-Marquardt по умолчанию (trainlm) для обучения.

trainFcn = 'trainlm';  % Levenberg-Marquardt backpropagation. 

Для проблем, в которых Levenberg-Marquardt не производит, когда точные результаты, как желаемый, или для больших проблем данных, рассматривают установку сетевой учебной функции к Байесовой Регуляризации (trainbr) или масштабированный метод сопряженных градиентов (trainscg), соответственно, с также

net.trainFcn = 'trainbr';
net.trainFcn = 'trainscg';

Создайте сеть

Создайте сеть. Сеть по умолчанию для подбора кривой функции (или регрессия) проблемы, fitnet, сеть прямого распространения с коричнево-сигмоидальной передаточной функцией по умолчанию в скрытом слое и линейной передаточной функцией в выходном слое. Сеть имеет один скрытый слой с десятью нейронами (значение по умолчанию). Сеть имеет тот выходной нейрон, потому что существует только одно значение отклика, сопоставленное с каждым входным вектором.

hiddenLayerSize = 10;
net = fitnet(hiddenLayerSize,trainFcn);

Примечание

Больше нейронов требует большего количества расчета, и у них есть тенденция сверхсоответствовать данным, когда номер определяется слишком высоко, но они позволяют сети решать более сложные задачи. Больше слоев требует большего количества расчета, но их использование может привести к сети, решающей комплексные задачи более эффективно. Чтобы использовать больше чем один скрытый слой, введите размеры скрытого слоя как элементы массива в fitnet команда.

Разделите данные

Создайте деление данных.

net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

С этими настройками векторы предиктора и векторы отклика случайным образом разделены, с 70% для обучения, 15% для валидации и 15% для тестирования. Для получения дополнительной информации о процессе деления данных, смотрите, Делят Данные для Оптимального Обучения Нейронной сети.

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

Обучите сеть.

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

Во время обучения открывается окно процесса обучения. Можно прервать обучение в любой точке путем нажатия на Stop Training.

Обучение закончилось, когда ошибка валидации увеличилась последовательно для шести итераций, которые произошли в итерации 10. Если вы нажимаете Performance в учебном окне, графике учебных ошибок, ошибок валидации, и тестируете ошибки, появляется, как показано в следующем рисунке. В этом примере результат разумен из-за следующих факторов:

  • Итоговая среднеквадратичная погрешность мала.

  • Ошибка набора тестов и ошибка набора валидации имеют подобные характеристики.

  • Никакой значительный сверхподбор кривой не произошел к эпохе 4 (где лучшая эффективность валидации происходит).

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

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

y = net(x);
e = gsubtract(t,y);
performance = perform(net,t,y)
performance =

   15.8475

Также возможно вычислить производительность сети только на набор тестов при помощи индексов тестирования, которые расположены в учебной записи. Для получения дополнительной информации смотрите, Анализируют Мелкую Эффективность Нейронной сети После Обучения.

tInd = tr.testInd;
tstOutputs = net(x(:,tInd));
tstPerform = perform(net,t(tInd),tstOutputs)
tstPerform =

   21.0148

Сеть представления

Просмотрите сетевой график.

view(net)

Анализ результатов

Анализ результатов. Чтобы выполнить линейную регрессию между сетевыми предсказаниями (выходные параметры) и соответствующие ответы (цели), нажмите Regression в учебном окне.

Выход отслеживает ответы хорошо для обучения, тестирования и наборов валидации, и R-значение - более чем 0,88 для общего набора данных. Если бы еще более точные результаты требовались, вы могли бы попробовать любой из этих подходов:

  • Сбросьте начальные сетевые веса и смещения к новым значениям с init и обучайтесь снова.

  • Увеличьте число скрытых нейронов.

  • Используйте больший обучающий набор данных.

  • Увеличьте число входных значений, если более релевантная информация доступна.

  • Попробуйте различный алгоритм настройки (см. Алгоритмы настройки).

В этом случае сетевой ответ является удовлетворительным, и можно теперь поместить сеть, чтобы использовать на новых данных.

Следующие шаги

Чтобы получить больше опыта в операциях командной строки, попробуйте некоторые из этих задач:

  • Во время обучения, открытого окно графика (такое как график регрессии), и, смотрят, что он анимирует.

  • Постройте из командной строки с функциями такой как plotfit, plotregression, plottrainstate и plotperform.

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

Каждый раз нейронная сеть обучена, может привести к различному решению из-за случайного начального веса и сместить значения и различные деления данных в обучение, валидацию и наборы тестов. В результате различные нейронные сети, обученные на той же проблеме, могут дать различные выходные параметры для того же входа. Чтобы гарантировать, что нейронная сеть хорошей точности была найдена, переобучайтесь несколько раз.

Существует несколько других методов для того, чтобы улучшить начальные решения, если более высокая точность желаема. Для получения дополнительной информации смотрите, Улучшают Мелкое Обобщение Нейронной сети и Стараются не Сверхсоответствовать.

Смотрите также

| | | | |

Похожие темы