Вычислите активации слоя нейронной сети для глубокого обучения
Можно извлечь функции с помощью обученной нейронной сети для глубокого обучения или на центральном процессоре или на графическом процессоре. Используя графический процессор требует Parallel Computing Toolbox™, и CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Задайте требования к аппаратным средствам с помощью ExecutionEnvironment
аргумент пары "имя-значение".
возвращает сетевые активации с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, features
= activations(___,Name,Value
)'OutputAs','rows'
задает выходной формат активации как 'rows'
. Задайте аргументы пары "имя-значение" после всех других входных параметров.
В этом примере показано, как извлечь изученные функции изображений из предварительно обученной сверточной нейронной сети и использовать те функции, чтобы обучить классификатор изображений. Извлечение признаков является самым легким и самым быстрым способом использовать представительную степень предварительно обученных глубоких сетей. Например, можно обучить машину опорных векторов (SVM) с помощью fitcecoc
(Statistics and Machine Learning Toolbox™) на извлеченных функциях. Поскольку извлечение признаков только требует одного прохода через данные, это - хорошая начальная точка, если у вас нет графического процессора, чтобы ускорить сетевое обучение с.
Загрузка данных
Разархивируйте и загрузите демонстрационные изображения как datastore изображений. imageDatastore
автоматически помечает изображения на основе имен папок и хранит данные как ImageDatastore
объект. Datastore изображений позволяет вам сохранить большие данные изображения, включая данные, которые не умещаются в памяти. Разделите данные в 70%-е обучение и 30% тестовых данных.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames'); [imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
Существует теперь 55 учебных изображений и 20 изображений валидации в этом очень небольшом наборе данных. Отобразите некоторые демонстрационные изображения.
numImagesTrain = numel(imdsTrain.Labels); idx = randperm(numImagesTrain,16); for i = 1:16 I{i} = readimage(imdsTrain,idx(i)); end figure imshow(imtile(I))
Загрузите предварительно обученную сеть
Загрузите предварительно обученную сеть AlexNet. Если Модель Deep Learning Toolbox для пакета Сетевой поддержки AlexNet не установлена, то программное обеспечение обеспечивает ссылку на загрузку. AlexNet обучен больше чем на миллионе изображений и может классифицировать изображения в 1 000 категорий объектов. Например, клавиатура, мышь, карандаш и многие животные. В результате модель изучила богатые представления функции для широкого спектра изображений.
net = alexnet;
Отобразите сетевую архитектуру. Сеть имеет пять сверточных слоев и три полносвязных слоя.
net.Layers
ans = 25x1 Layer array with layers: 1 'data' Image Input 227x227x3 images with 'zerocenter' normalization 2 'conv1' Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0 0 0] 3 'relu1' ReLU ReLU 4 'norm1' Cross Channel Normalization cross channel normalization with 5 channels per element 5 'pool1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 6 'conv2' Grouped Convolution 2 groups of 128 5x5x48 convolutions with stride [1 1] and padding [2 2 2 2] 7 'relu2' ReLU ReLU 8 'norm2' Cross Channel Normalization cross channel normalization with 5 channels per element 9 'pool2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 10 'conv3' Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1] 11 'relu3' ReLU ReLU 12 'conv4' Grouped Convolution 2 groups of 192 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1] 13 'relu4' ReLU ReLU 14 'conv5' Grouped Convolution 2 groups of 128 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1] 15 'relu5' ReLU ReLU 16 'pool5' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 17 'fc6' Fully Connected 4096 fully connected layer 18 'relu6' ReLU ReLU 19 'drop6' Dropout 50% dropout 20 'fc7' Fully Connected 4096 fully connected layer 21 'relu7' ReLU ReLU 22 'drop7' Dropout 50% dropout 23 'fc8' Fully Connected 1000 fully connected layer 24 'prob' Softmax softmax 25 'output' Classification Output crossentropyex with 'tench' and 999 other classes
Первый слой, изображение ввело слой, требует входных изображений размера 227 227 3, где 3 количество цветовых каналов.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Извлеките функции изображений
Сеть создает иерархическое представление входных изображений. Более глубокие слои содержат высокоуровневые функции, созданное использование функций низшего уровня более ранних слоев. Чтобы получить представления функции обучения и тестовых изображений, используйте activations
на полносвязном слое 'fc7'
. Чтобы получить представление низшего уровня изображений, используйте более ранний слой в сети.
Сеть требует входных изображений размера 227 227 3, но изображения в хранилищах данных изображений имеют различные размеры. Чтобы автоматически изменить размер обучения и тестовых изображений, прежде чем они будут введены к сети, создайте увеличенные хранилища данных изображений, задайте желаемый размер изображения и используйте эти хранилища данных в качестве входных параметров к activations
.
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain); augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest); layer = 'fc7'; featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows'); featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');
Извлеките метки класса из обучения и тестовых данных.
YTrain = imdsTrain.Labels; YTest = imdsTest.Labels;
Подходящий классификатор изображений
Используйте функции, извлеченные из учебных изображений как переменные предикторы, и соответствуйте машине опорных векторов (SVM) мультикласса с помощью fitcecoc
(Statistics and Machine Learning Toolbox).
mdl = fitcecoc(featuresTrain,YTrain);
Классифицируйте тестовые изображения
Классифицируйте тестовые изображения с помощью обученной модели SVM и функций, извлеченных из тестовых изображений.
YPred = predict(mdl,featuresTest);
Отобразите четыре демонстрационных тестовых изображения с их предсказанными метками.
idx = [1 5 10 15]; figure for i = 1:numel(idx) subplot(2,2,i) I = readimage(imdsTest,idx(i)); label = YPred(idx(i)); imshow(I) title(label) end
Вычислите точность классификации на набор тестов. Точность является частью меток, которые сеть предсказывает правильно.
accuracy = mean(YPred == YTest)
accuracy = 1
Этот SVM имеет высокую точность. Если точность высоко достаточно не использует извлечение признаков, то попробуйте передачу обучения вместо этого.
net
— Обучивший сетьSeriesNetwork
возразите | DAGNetwork
объектОбучивший сеть в виде SeriesNetwork
или DAGNetwork
объект. Можно получить обучивший сеть путем импорта предварительно обученной сети (например, при помощи googlenet
функция) или по образованию ваша собственная сеть с помощью trainNetwork
.
imds
ImageDatastoreImageDatastore
объектОтобразите datastore в виде ImageDatastore
объект.
ImageDatastore
позволяет пакетное чтение JPG или упреждающую выборку использования файлов изображений PNG. Если вы используете пользовательскую функцию в чтении изображений, то ImageDatastore
не выбирает с упреждением.
Используйте augmentedImageDatastore
для эффективной предварительной обработки изображений для глубокого обучения включая изменение размеров изображений.
Не используйте readFcn
опция imageDatastore
когда эта опция обычно значительно медленнее.
ds
datastoreDatastore входных данных.
Для сетей с одним входом, ds
может возвратиться также:
одно изображение или последовательность
массив ячеек изображений или последовательностей
таблица, где первый столбец содержит изображения или последовательности
Поскольку сети с повторным изображением вводят слои, ds
должен быть объединенный или преобразованный datastore, который возвращает массив ячеек с numInputs
столбцы, содержащие входные данные, где numInputs
количество сетевых входных параметров. i
элемент th массива ячеек соответствует входу net.InputNames(i)
.
Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения.
X
Данные изображенияДанные изображения в виде числового массива. Размер массива зависит от типа входа изображений:
Входной параметр | Описание |
---|---|
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, является количеством изображений. |
Если массив содержит NaN
s, затем они распространены через сеть.
Для входа изображений, если 'OutputAs'
опцией является 'channels'
, затем изображения во входных данных X
может быть больше, чем входной размер входного слоя изображений сети. Для других выходных форматов, изображений в X
должен иметь тот же размер как входной размер входного слоя изображений сети.
sequences
— Последовательность или данные временных рядовПоследовательность или данные временных рядов в виде 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 должен возвратить данные как массив ячеек последовательностей или таблицы, первый столбец которой содержит последовательности. Размерности данных о последовательности должны соответствовать приведенной выше таблице.
tbl
— Таблица изображенийtable
Таблица изображений, содержащих входные данные в первом столбце. Каждая строка в таблице соответствует наблюдению. Таблица содержит пути к абсолютному или файлу прямого доступа к изображению в виде вектора символов или отображает заданный как числовой массив.
Типы данных: table
layer
— Слой, чтобы извлечь функции изСлой, чтобы извлечь функции из в виде числового индекса или вектора символов.
Вычислить активации SeriesNetwork
возразите, задайте слой с помощью его числового индекса, или как вектора символов, соответствующего имени слоя.
Вычислить активации DAGNetwork
возразите, задайте слой как вектор символов, соответствующий имени слоя. Если слой имеет несколько выходных параметров, задайте слой и выведите как имя слоя, сопровождаемое символом “/”, сопровождаемый под названием слой выход. Таким образом, layer
имеет форму 'layerName/outputName'
.
Пример 3
Пример: 'conv1'
Пример: 'mpool/out'
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
activations(net,X,layer,'OutputAs','rows')
'OutputAs'
— Формат выходных активаций'channels'
(значение по умолчанию) | 'rows'
| 'columns'
Формат выходных активаций в виде разделенной запятой пары, состоящей из 'OutputAs'
и любой 'channels'
'Строки'
, или 'columns'
. Для описаний различных выходных форматов смотрите features
.
Для входа изображений, если 'OutputAs'
опцией является 'channels'
, затем изображения во входных данных X
может быть больше, чем входной размер входного слоя изображений сети. Для других выходных форматов, изображений в X
должен иметь тот же размер как входной размер входного слоя изображений сети.
Пример: 'OutputAs','rows'
'MiniBatchSize'
— Размер мини-пакетовРазмер мини-пакетов, чтобы использовать в предсказании в виде положительного целого числа. Большие мини-пакетные размеры требуют большей памяти, но могут привести к более быстрым предсказаниям.
Пример: 'MiniBatchSize',256
'SequenceLength'
— Опция, чтобы заполнить, обрежьте или разделите входные последовательности'longest'
(значение по умолчанию) | 'shortest'
| положительное целое числоОпция, чтобы заполнить, обрежьте или разделите входные последовательности в виде одного из следующего:
'longest'
— Заполните последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая длинная последовательность. Эта опция не отбрасывает данных, хотя дополнение может ввести шум сети.
'shortest'
— Усеченные последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая короткая последовательность. Эта опция гарантирует, что никакое дополнение не добавляется, за счет отбрасывания данных.
Положительное целое число — Для каждого мини-пакета, заполните последовательности к самому близкому кратному заданная длина, которая больше самой долгой длины последовательности в мини-пакете, и затем разделяет последовательности в меньшие последовательности заданной длины. Если разделение происходит, то программное обеспечение создает дополнительные мини-пакеты. Используйте эту опцию, если полные последовательности не умещаются в памяти. В качестве альтернативы попытайтесь сократить количество последовательностей на мини-пакет путем установки 'MiniBatchSize'
опция к нижнему значению.
Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.
Пример: 'SequenceLength','shortest'
'SequencePaddingValue'
— Значение, чтобы заполнить входные последовательностиЗначение, которым можно заполнить входные последовательности в виде скаляра. Опция допустима только когда SequenceLength
'longest'
или положительное целое число. Не заполняйте последовательности NaN
, потому что выполнение так может распространить ошибки в сети.
Пример: 'SequencePaddingValue',-1
'SequencePaddingDirection'
— Направление дополнения или усечения'right'
(значение по умолчанию) | 'left'
Направление дополнения или усечения в виде одного из следующего:
'right'
— Заполните или обрежьте последовательности справа. Последовательности запускают одновременно шаг, и программное обеспечение обрезает или добавляет дополнение в конец последовательностей.
'left'
— Заполните или обрежьте последовательности слева. Программное обеспечение обрезает или добавляет дополнение в запуск последовательностей так, чтобы конец последовательностей одновременно продвинулся.
Поскольку слои LSTM обрабатывают данные о последовательности один временной шаг за один раз, когда слой OutputMode
свойством является 'last'
, любое дополнение в итоговых временных шагах может негативно влиять на слой выход. Чтобы заполнить или обрезать данные о последовательности слева, установите 'SequencePaddingDirection'
опция к 'left'
.
Для сетей от последовательности к последовательности (когда OutputMode
свойством является 'sequence'
для каждого слоя LSTM), любой дополняющий в первых временных шагах может негативно влиять на предсказания для более ранних временных шагов. Чтобы заполнить или обрезать данные о последовательности справа, установите 'SequencePaddingDirection'
опция к 'right'
.
Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.
'Acceleration'
— Оптимизация производительности'auto'
(значение по умолчанию) | 'mex'
| 'none'
Оптимизация производительности в виде разделенной запятой пары, состоящей из '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'
| 'cpu'
Аппаратный ресурс в виде разделенной запятой пары, состоящей из 'ExecutionEnvironment'
и одно из следующего:
'auto'
— Используйте графический процессор, если вы доступны; в противном случае используйте центральный процессор.
'gpu'
— Используйте графический процессор. Используя графический процессор требует Parallel Computing Toolbox, и CUDA включил NVIDIA, графический процессор с вычисляет возможность 3.0 или выше. Если Parallel Computing Toolbox или подходящий графический процессор не доступны, то программное обеспечение возвращает ошибку.
'cpu'
— Используйте центральный процессор.
Пример: 'ExecutionEnvironment','cpu'
features
— Активации от слоя сетиАктивации от слоя сети, возвращенного как числовой массив или массив ячеек числовых массивов. Формат features
зависит от типа входных данных, типа слоя выход и 'OutputAs'
опция.
Если net
имеет входной слой изображений, затем features
числовой массив.
'OutputAs' | features |
---|---|
'channels' | Для 2D данных изображения, Для 3-D данных изображения, |
'rows' | n-by-m матрица, где n является количеством наблюдений и m количество выходных элементов от выбранного слоя. В этом случае, features(i,:) содержит активации для i изображение th. |
'columns' | m-by-n матрица, где m является количеством выходных элементов от выбранного слоя и n, является количеством наблюдений. В этом случае, features(:,i) содержит активации для i изображение th. |
Если net
имеет входной слой последовательности и layer
имеет последовательность выход (например, слои LSTM с режимом вывода 'sequence'
), затем features
массив ячеек. В этом случае, 'OutputAs'
опцией должен быть 'channels'
.
'OutputAs' | features |
---|---|
'channels' | Для векторного входа последовательности, Для 2D входа последовательности изображений, Для 3-D входа последовательности изображений, В этих случаях, |
Если net
имеет входной слой последовательности и layer
выходные данные пробела (например, слой LSTM с режимом вывода 'last'
), затем features
числовой массив.
'OutputAs' | features |
---|---|
'channels' | Для векторного входа последовательности, Для 2D входа последовательности изображений, Для 3-D входа последовательности изображений, В этих случаях, |
'rows' | n-by-m матрица, где n является количеством наблюдений и m количество выходных элементов от выбранного слоя. В этом случае, features(i,:) содержит активации для i последовательность th. |
'columns' | m-by-n матрица, где m является количеством выходных элементов от выбранного слоя и n, является количеством наблюдений. В этом случае, features(:,i) содержит активации для i изображение th. |
Все функции для обучения глубокому обучению, предсказания и валидации в Deep Learning Toolbox™ выполняют расчеты с помощью арифметики с плавающей точкой, с одинарной точностью. Функции для глубокого обучения включают trainNetwork
, predict
, classify
, и activations
. Программное обеспечение использует арифметику с одинарной точностью, когда вы обучаете нейронные сети с помощью и центральных процессоров и графических процессоров.
[1] М. Кудо, J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, страницы 1103-1111.
[2] Репозиторий Машинного обучения UCI: японский Набор данных Гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
Указания и ограничения по применению:
Вход X
не должен иметь переменного размера. Размер должен быть зафиксирован во время генерации кода.
layer
аргумент должен быть постоянным.
Только 'OutputAs'
аргумент пары "имя-значение" поддерживается. Значением должен быть 'channels'
.
Для получения дополнительной информации о генерации кода для глубоких нейронных сетей, смотрите Рабочий процесс для Генерации кода Глубокого обучения с MATLAB Coder (MATLAB Coder).
Указания и ограничения по применению:
Генерация кода графического процессора поддерживает следующие синтаксисы:
features = activations(net,X,layer)
features = activations(__,Name,Value)
Вход X
не должен иметь переменного размера. Размер должен быть зафиксирован во время генерации кода.
Генерация кода графического процессора для activations
функционируйте входные параметры поддержек, которые заданы как типы данных с плавающей запятой полуточности. Для получения дополнительной информации смотрите half
.
layer
аргумент должен быть постоянным временем компиляции.
Только 'OutputAs'
и 'MiniBatchSize'
аргументы пары "имя-значение" поддерживаются для генерации кода. Значение 'OutputAs'
парой "имя-значение" должен быть 'channels'
.
Все пары "имя-значение" должны быть константами времени компиляции.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.