classify

Классифицируйте данные с помощью обученной глубокой нейронной сети

Описание

Можно сделать прогнозы с помощью обученной нейронной сети в глубоком обучении или на центральном процессоре или на графическом процессоре. Используя графический процессор требует Parallel Computing Toolbox™, и CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Задайте требования к аппаратным средствам с помощью ExecutionEnvironment аргумент пары "имя-значение".

Для сетей с несколькими выходными параметрами используйте predict ans установила 'ReturnCategorial' опция к true.

[YPred,scores] = classify(net,imds) предсказывает метки класса для данных изображения в imds с помощью обучившего сеть, net.

[YPred,scores] = classify(net,ds) предсказывает метки класса для данных в ds с помощью обучившего сеть, net. Для сетей с несколькими входными параметрами используйте этот синтаксис с объединенным или преобразованным объектом datastore.

пример

[YPred,scores] = classify(net,X) предсказывает метки класса для данных изображения в X с помощью обучившего сеть, net.

пример

[YPred,scores] = classify(net,sequences) предсказывает метки класса для временных рядов или данных о последовательности в sequences с помощью обученной сети LSTM, net.

[YPred,scores] = classify(net,tbl) предсказывает метки класса для данных в tbl с помощью обучившего сеть, net.

пример

[YPred,scores] = classify(___,Name,Value) предсказывает метки класса с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".

Совет

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

Примеры

свернуть все

Загрузите выборочные данные.

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData загружает набор обучающих данных цифры как 4-D данные массива. XTrain 28 28 1 5 000 массивов, где 28 высота, и 28 ширина изображений. 1 количество каналов, и 5000 количество синтетических изображений рукописных цифр. YTrain категориальный вектор, содержащий метки для каждого наблюдения.

Создайте архитектуру сверточной нейронной сети.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Установите опции на настройки по умолчанию для стохастического градиентного спуска с импульсом.

options = trainingOptions('sgdm');

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

rng('default')
net = trainNetwork(XTrain,YTrain,layers,options);
Training on single GPU.
Initializing image normalization.
|====================================================================================================|
|   Epoch   |   Iteration   |   Time Elapsed   |   Mini-batch   |   Mini-batch   |   Base Learning   |
|           |               |    (hh:mm:ss)    |      Loss      |    Accuracy    |       Rate        |
|====================================================================================================|
|         1 |             1 |         00:00:00 |         2.3026 |          7.81% |            0.0100 |
|         2 |            50 |         00:00:00 |         2.2735 |         33.59% |            0.0100 |
|         3 |           100 |         00:00:01 |         1.6613 |         48.44% |            0.0100 |
|         4 |           150 |         00:00:01 |         1.1803 |         64.06% |            0.0100 |
|         6 |           200 |         00:00:02 |         1.0499 |         64.06% |            0.0100 |
|         7 |           250 |         00:00:03 |         0.8392 |         76.56% |            0.0100 |
|         8 |           300 |         00:00:04 |         0.6981 |         77.34% |            0.0100 |
|         9 |           350 |         00:00:04 |         0.7084 |         77.34% |            0.0100 |
|        11 |           400 |         00:00:05 |         0.4902 |         87.50% |            0.0100 |
|        12 |           450 |         00:00:06 |         0.3839 |         91.41% |            0.0100 |
|        13 |           500 |         00:00:06 |         0.2986 |         92.19% |            0.0100 |
|        15 |           550 |         00:00:07 |         0.2583 |         93.75% |            0.0100 |
|        16 |           600 |         00:00:08 |         0.2009 |         97.66% |            0.0100 |
|        17 |           650 |         00:00:08 |         0.2642 |         92.97% |            0.0100 |
|        18 |           700 |         00:00:09 |         0.1449 |         97.66% |            0.0100 |
|        20 |           750 |         00:00:10 |         0.1314 |         96.88% |            0.0100 |
|        21 |           800 |         00:00:11 |         0.1232 |         97.66% |            0.0100 |
|        22 |           850 |         00:00:11 |         0.1009 |         98.44% |            0.0100 |
|        24 |           900 |         00:00:12 |         0.1051 |        100.00% |            0.0100 |
|        25 |           950 |         00:00:13 |         0.1483 |         97.66% |            0.0100 |
|        26 |          1000 |         00:00:13 |         0.0743 |         99.22% |            0.0100 |
|        27 |          1050 |         00:00:14 |         0.0603 |        100.00% |            0.0100 |
|        29 |          1100 |         00:00:15 |         0.0769 |         99.22% |            0.0100 |
|        30 |          1150 |         00:00:16 |         0.0524 |        100.00% |            0.0100 |
|        30 |          1170 |         00:00:16 |         0.0566 |        100.00% |            0.0100 |
|====================================================================================================|

Запустите обучивший сеть на наборе тестов.

[XTest,YTest]= digitTest4DArrayData;
YPred = classify(net,XTest);

Отобразите первые 10 изображений в тестовых данных и сравните с классификацией от classify.

[YTest(1:10,:) YPred(1:10,:)]
ans = 10×2 categorical array
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 
     0      0 

Результаты classify совпадайте с истинными цифрами для первых десяти изображений.

Вычислите точность по всем тестовым данным.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9770

Предварительно обученная сеть Load. JapaneseVowelsNet предварительно обученная сеть LSTM, обученная на японском наборе данных Vowels как описано в [1] и [2]. Это было обучено на последовательностях, отсортированных по длине последовательности с мини-пакетным размером 27.

load JapaneseVowelsNet

Просмотрите сетевую архитектуру.

net.Layers
ans = 
  5x1 Layer array with layers:

     1   'sequenceinput'   Sequence Input          Sequence input with 12 dimensions
     2   'lstm'            LSTM                    LSTM with 100 hidden units
     3   'fc'              Fully Connected         9 fully connected layer
     4   'softmax'         Softmax                 softmax
     5   'classoutput'     Classification Output   crossentropyex with '1' and 8 other classes

Загрузите тестовые данные.

[XTest,YTest] = japaneseVowelsTestData;

Классифицируйте тестовые данные.

YPred = classify(net,XTest);

Просмотрите метки первых 10 последовательностей с их предсказанными метками.

[YTest(1:10) YPred(1:10)]
ans = 10x2 categorical array
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 
     1      1 

Вычислите точность классификации прогнозов.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.8595

Входные параметры

свернуть все

Обучивший сеть, заданный как SeriesNetwork или DAGNetwork объект. Можно получить обучивший сеть путем импорта предварительно обученной сети (например, при помощи googlenet функция) или по образованию ваша собственная сеть с помощью trainNetwork.

Отобразите datastore, заданный как ImageDatastore объект.

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

Совет

Используйте augmentedImageDatastore для эффективной предварительной обработки изображений для глубокого обучения включая изменение размеров изображений.

Не используйте readFcn опция imageDatastore когда эта опция обычно значительно медленнее.

Datastore входных данных.

Для сетей с одним входом, ds может возвратиться также:

  • одно изображение

  • массив ячеек изображений

  • таблица, где первый столбец содержит изображения

Для сетей с несколькими входными параметрами, ds должен быть объединенный или преобразованный datastore, который возвращает массив ячеек с numInputs столбцы, содержащие входные данные, где numInputs количество сетевых входных параметров. iэлемент th массива ячеек соответствует входу net.InputNames(i).

Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения.

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

Входной параметрОписание
2D изображенияh-by-w-by-c-by-N числовой массив, где h, w и c являются высотой, шириной, и количеством каналов изображений, соответственно, и N, является количеством изображений.
3-D изображенияh-by-w-by-d-by-c-by-N числовой массив, где h, w, d и c являются высотой, шириной, глубиной, и количеством каналов изображений, соответственно, и N, является количеством изображений.

Если массив содержит NaNs, затем они распространены через сеть.

Последовательность или данные временных рядов, заданные как N-by-1 массив ячеек числовых массивов, где N является количеством наблюдений, числовой массив, представляющий одну последовательность или datastore.

Для входа массива ячеек или числового массива размерности числовых массивов, содержащих последовательности, зависят от типа данных.

Входной параметрОписание
Векторные последовательностиc-by-s матрицы, где c является количеством функций последовательностей и s, является длиной последовательности.
2D последовательности изображенийh-by-w-by-c-by-s массивы, где h, w и c соответствуют высоте, ширине, и количеству каналов изображений, соответственно, и s, является длиной последовательности.
3-D последовательности изображенийh-by-w-by-d-by-c-by-s, где h, w, d и c соответствуют высоте, ширине, глубине, и количеству каналов 3-D изображений, соответственно, и s, является длиной последовательности.

Для входа datastore datastore должен возвратить данные как массив ячеек последовательностей или таблицы, первый столбец которой содержит последовательности. Размерности данных о последовательности должны соответствовать приведенной выше таблице.

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

Типы данных: table

Аргументы в виде пар имя-значение

Пример: 'MiniBatchSize','256' задает мини-пакетный размер как 256.

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

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

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

Пример: 'MiniBatchSize',256

Оптимизация производительности, заданная как разделенная запятой пара, состоящая из 'Acceleration' и одно из следующего:

  • 'auto' — Автоматически примените много оптимизации, подходящей для входной сети и аппаратного ресурса.

  • 'mex' — Скомпилируйте и выполните MEX-функцию. Эта опция доступна при использовании графического процессора только. Используя графический процессор требует Parallel Computing Toolbox, и CUDA включил NVIDIA, графический процессор с вычисляет возможность 3.0 или выше. Если Parallel Computing Toolbox или подходящий графический процессор не доступны, то программное обеспечение возвращает ошибку.

  • 'none' — Отключите все ускорение.

Опцией по умолчанию является 'auto'. Если 'auto' задан, MATLAB® применит много совместимой оптимизации. Если вы используете 'auto' опция, MATLAB никогда не генерирует MEX-функцию.

Используя 'Acceleration' опции 'auto' и 'mex' может предложить выигрыши в производительности, но за счет увеличенного начального времени выполнения. Последующие вызовы совместимыми параметрами быстрее. Используйте оптимизацию производительности, когда вы запланируете вызвать функцию многократно с помощью новых входных данных.

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

'mex' опция только доступна, когда вы используете графический процессор. Необходимо было установить компилятор C/C++ и Интерфейс GPU Coder™ для пакета поддержки Библиотек Глубокого обучения. Установите пакет поддержки с помощью Add-On Explorer в MATLAB. Для инструкций по настройке смотрите Setup MEX (GPU Coder). GPU Coder не требуется.

'mex' опция не поддерживает все слои. Для списка поддерживаемых слоев смотрите Поддерживаемые Слои (GPU Coder). Рекуррентные нейронные сети (RNNs), содержащий sequenceInputLayer не поддержаны.

Вы не можете использовать MATLAB Compiler™, чтобы развернуть вашу сеть при использовании 'mex' опция.

Пример: 'Acceleration','mex'

Аппаратный ресурс, заданный как разделенная запятой пара, состоящая из 'ExecutionEnvironment' и одно из следующего:

  • 'auto' — Используйте графический процессор, если вы доступны; в противном случае используйте центральный процессор.

  • 'gpu' — Используйте графический процессор. Используя графический процессор требует Parallel Computing Toolbox, и CUDA включил NVIDIA, графический процессор с вычисляет возможность 3.0 или выше. Если Parallel Computing Toolbox или подходящий графический процессор не доступны, то программное обеспечение возвращает ошибку.

  • 'cpu' — Используйте центральный процессор.

Пример: 'ExecutionEnvironment','cpu'

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

  • 'longest' — Заполните последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая длинная последовательность. Эта опция не отбрасывает данных, хотя дополнение может ввести шум сети.

  • 'shortest' — Усеченные последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая короткая последовательность. Эта опция гарантирует, что никакое дополнение не добавляется, за счет отбрасывания данных.

  • Положительное целое число — Для каждого мини-пакета, заполните последовательности к самому близкому кратному заданная длина, которая больше самой долгой длины последовательности в мини-пакете, и затем разделяет последовательности в меньшие последовательности заданной длины. Если разделение происходит, то программное обеспечение создает дополнительные мини-пакеты. Используйте эту опцию, если полные последовательности не умещаются в памяти. В качестве альтернативы попытайтесь сократить количество последовательностей на мини-пакет путем установки 'MiniBatchSize' опция к нижнему значению.

Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.

Пример: 'SequenceLength','shortest'

Направление дополнения или усечения, заданного как одно из следующего:

  • 'right' — Заполните или обрежьте последовательности справа. Последовательности запускают одновременно шаг, и программное обеспечение обрезает или добавляет дополнение в конец последовательностей.

  • 'left' — Заполните или обрежьте последовательности слева. Программное обеспечение обрезает или добавляет дополнение в запуск последовательностей так, чтобы конец последовательностей одновременно продвинулся.

Поскольку слои LSTM обрабатывают данные о последовательности один временной шаг за один раз, когда слой OutputMode свойством является 'last', любое дополнение в итоговых временных шагах может негативно влиять на слой выход. Чтобы заполнить или обрезать данные о последовательности слева, установите 'SequencePaddingDirection' опция к 'left'.

Для сетей от последовательности к последовательности (когда OutputMode свойством является 'sequence' для каждого слоя LSTM), любой дополняющий в первых временных шагах может негативно влиять на прогнозы для более ранних временных шагов. Чтобы заполнить или обрезать данные о последовательности справа, установите 'SequencePaddingDirection' опция к 'right'.

Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.

Значение, которым можно заполнить входные последовательности, заданные как скаляр. Опция допустима только когда SequenceLength 'longest' или положительное целое число. Не заполняйте последовательности NaN, потому что выполнение так может распространить ошибки в сети.

Пример: 'SequencePaddingValue',-1

Выходные аргументы

свернуть все

Предсказанные метки класса, возвращенные как категориальный вектор или массив ячеек категориальных векторов. Формат YPred зависит от типа проблемы.

Следующая таблица описывает формат для проблем классификации.

ЗадачаФормат
Отобразите классификациюN-by-1 категориальный вектор меток, где N является количеством наблюдений.
Классификация последовательностей к метке
Классификация от последовательности к последовательности

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

Для проблем классификации от последовательности к последовательности с одним наблюдением, sequences может быть матрица. В этом случае, YPred категориальная последовательность меток.

Предсказанные баллы или ответы, возвращенные как матрица или массив ячеек матриц. Формат scores зависит от типа проблемы.

Следующая таблица описывает формат scores.

ЗадачаФормат
Отобразите классификациюN-by-K матрица, где N является количеством наблюдений и K, является количеством классов
Классификация последовательностей к метке
Классификация от последовательности к последовательности

N-by-1 массив ячеек матриц, где N является количеством наблюдений. Последовательности являются матрицами со строками K, где K является количеством классов. Каждая последовательность имеет то же количество временных шагов как соответствующая входная последовательность после применения SequenceLength опция к каждому мини-пакету независимо.

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

Для примера, исследуя баллы классификации, смотрите, Классифицируют Изображения Веб-камеры Используя Глубокое обучение.

Алгоритмы

Все функции для обучения глубокому обучению, прогноза и валидации в Deep Learning Toolbox™ выполняют расчеты с помощью арифметики с плавающей точкой, с одинарной точностью. Функции для глубокого обучения включают trainNetwork, predict, classify, и activations. Программное обеспечение использует арифметику с одинарной точностью, когда вы обучаете нейронные сети с помощью и центральных процессоров и графических процессоров.

Альтернативы

Для сетей с несколькими выходными параметрами используйте predict и набор 'ReturnCategorial' опция к true.

Можно вычислить предсказанные баллы из обучившего сеть использования predict.

Можно также вычислить активации из сетевого слоя с помощью activations.

Для последовательности к метке и сетей классификации от последовательности к последовательности, можно сделать прогнозы и обновить сетевое состояние с помощью classifyAndUpdateState и predictAndUpdateState.

Ссылки

[1] М. Кудо, J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, страницы 1103-1111.

[2] Репозиторий Машинного обучения UCI: японский Набор данных Гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

Введенный в R2016a