Классифицируйте шаблоны с мелкой нейронной сетью

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

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

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

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

Совет

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

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

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

То, когда существует только два класса, каждый ответ имеет два элемента, 0 и 1, указывая, которые классифицируют соответствующее наблюдение, принадлежит. Например, можно описать задачу классификации 2D классов можно следующим образом:

predictors = [7 10 3 1 6; 5 8 1 1 6; 6 7 1 1 6];
responses = [0 0 1 1 0; 1 1 0 0 1];
Данные состоят из пяти наблюдений, каждого с тремя функциями, классифицированными в один из двух классов.

Когда предикторы должны быть классифицированы в N различные классы, ответы имеют элементы N. Для каждого ответа один элемент равняется 1, и другие 0. Например, следующие линии показывают, как описать задачу классификации, которая делит углы 5 кубом 5 на 5 в три класса:

  • Источник (первый входной вектор) в одном классе

  • Угол, самый дальний от источника (последний входной вектор) во втором классе

  • Все другие точки в третьем классе

predictors  = [0 0 0 0 5 5 5 5; 0 0 5 5 0 0 5 5; 0 5 0 5 0 5 0 5];
responses = [1 0 0 0 0 0 0 0; 0 1 1 1 1 1 1 0; 0 0 0 0 0 0 0 1];
Данные состоят из восьми наблюдений, каждого с тремя функциями, классифицированными в один из трех классов.

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

Классифицируйте шаблоны Используя приложение Neural Net Pattern Recognition

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

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

nprtool

Выберите Data

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

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

Информация об импортированных данных появляется в Сводных данных Модели. Этот набор данных содержит 214 наблюдений, каждого с 9 функциями. Каждое наблюдение классифицируется в один из двух классов: окно или неокно.

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

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

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

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

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

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

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

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

Чтобы обучить сеть, нажмите Train.

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

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

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

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

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

Цветные линии на каждой оси представляют кривые ROC. Кривая ROC является графиком истинного положительного уровня (чувствительность) по сравнению с ложным положительным уровнем (1 - специфика), когда порог варьируется. Совершенный тест показал бы точки в верхнем левом углу с 100%-й чувствительностью и 100%-й спецификой. Для этой проблемы сеть выполняет очень хорошо.

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

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

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

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

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

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

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

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

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

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

Классифицируйте шаблоны Используя функции командной строки

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

% Solve a Pattern Recognition Problem with a Neural Network
% Script generated by Neural Pattern Recognition app
% Created 22-Mar-2021 16:50:20
%
% This script assumes these variables are defined:
%
%   glassInputs - input data.
%   glassTargets - target data.

x = glassInputs;
t = glassTargets;

% 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 = 'trainscg';  % Scaled conjugate gradient backpropagation.

% Create a Pattern Recognition Network
hiddenLayerSize = 10;
net = patternnet(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)
tind = vec2ind(t);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind);

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotconfusion(t,y)
%figure, plotroc(t,y)

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

Выберите Data

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

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

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

[x,t] = glass_dataset;
загрузит стеклянные предикторы в массив x и стеклянные ответы в массив t.

Выберите Training Algorithm

Задайте алгоритм настройки.

trainFcn = 'trainscg';  % Scaled conjugate gradient backpropagation.

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

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

Сеть имеет два выходных нейрона, потому что существует два значения отклика (классы), сопоставленные с каждым входным вектором. Каждый выходной нейрон представляет класс. Когда входной вектор соответствующего класса применяется к сети, соответствующий нейрон должен произвести 1, и другие нейроны должны вывести 0.

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

Примечание

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

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

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

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.

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

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

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

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

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

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

    0.0756

Можно также вычислить часть неправильно классифицированных наблюдений. В этом примере модель имеет очень низкий misclassification уровень.

tind = vec2ind(t);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind)
percentErrors =

    0.0561

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

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

    1.8129

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

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

view(net)

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

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

figure, plotconfusion(t,y)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

| | | |

Похожие темы