Вычислите сверточные активации слоя нейронной сети
Можно извлечь функции с помощью обученной сверточной нейронной сети (ConvNet, CNN) или на центральном процессоре или на графическом процессоре. Используя графический процессор требует Parallel Computing Toolbox™, и CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Задайте требования к аппаратным средствам с помощью аргумента пары "имя-значение" ExecutionEnvironment
.
features = activations(net,X,layer)
features = activations(net,X,layer,Name,Value)
возвращает сетевые активации для определенного слоя с помощью обучившего сеть features
= activations(net
,X
,layer
)net
и данных в X
.
Функция только поддерживает сети с imageInputLayer
или входным слоем image3dInputLayer
изображений.
возвращает сетевые активации для определенного слоя с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, features
= activations(net
,X
,layer
,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 изображений валидации в этом очень небольшом наборе данных. Отобразите некоторые демонстрационные изображения.
numTrainImages = numel(imdsTrain.Labels); idx = randperm(numTrainImages,16); figure for i = 1:16 subplot(4,4,i) I = readimage(imdsTrain,idx(i)); imshow(I) end
Загрузите предварительно обученную сеть
Загрузите предварительно обученную сеть 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).
classifier = fitcecoc(featuresTrain,YTrain);
Классифицируйте тестовые изображения
Классифицируйте тестовые изображения с помощью обученной модели SVM функции, извлеченные от тестовых изображений.
YPred = predict(classifier,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(char(label)) end
Вычислите точность классификации на набор тестов. Точность является частью меток, которые сеть предсказывает правильно.
accuracy = mean(YPred == YTest)
accuracy = 1
Этот SVM имеет высокую точность. Если точность высоко достаточно не использует выделение признаков, то попробуйте передачу, учащуюся вместо этого.
.NET
Обучивший сетьSeriesNetwork
| объект DAGNetwork
Обучивший сеть, заданный как объект SeriesNetwork
или DAGNetwork
. Можно получить обучивший сеть путем импорта предварительно обученной сети или по образованию собственная сеть с помощью функции trainNetwork
. Для получения дополнительной информации о предварительно обученных сетях, смотрите Предварительно обученные Глубокие нейронные сети.
activations
только поддерживает сети с imageInputLayer
или входным слоем image3dInputLayer
изображений.
X
Данные изображенияImageDatastore
| datastore | table
Данные изображения, заданные как одно из следующих.
Входной параметр | Описание |
---|---|
Трехмерный массив | Числовой массив, который представляет одно изображение. Массив имеет размер h-by-w-by-c, где h, w и c соответствуют высоте, ширине и количеству каналов изображения, соответственно. |
Массив 4-D | Числовой массив, который представляет стек изображений. Массив имеет размер h-by-w-by-c-by-N, где N является количеством изображений в стеке изображений. |
ImageDatastore |
Для получения дополнительной информации смотрите аргумент |
Datastore | Datastore, который возвращает данные как одно изображение, массив ячеек изображений или таблицу, первый столбец которой содержит изображения. Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения. |
Таблица | Первый столбец таблицы содержит или каналы передачи изображения или трехмерные массивы, представляющие изображения. Последующие столбцы содержат ответы. |
Если значение 'OutputAs'
равняется 'channels'
, то изображения во входных данных X
могут быть больше, чем входной размер входного слоя изображений сети. Для других выходных форматов изображения в X
должны иметь тот же размер как входной размер входного слоя изображений сети.
layer
— Слой, чтобы извлечь функции отСлой, чтобы извлечь функции от, заданный как числовой индекс или вектор символов.
Чтобы вычислить активации объекта SeriesNetwork
, задайте слой с помощью его числового индекса, или как вектора символов, соответствующего имени слоя.
Чтобы вычислить активации объекта DAGNetwork
, задайте слой как вектор символов, соответствующий имени слоя. Если слой имеет несколько выходных параметров, задайте слой и выведите как имя слоя, сопровождаемое символом “/”, сопровождаемый под названием слой вывод. Таким образом, layer
находится на форме 'layerName/outputName'
.
Пример 3
Пример: 'conv1'
Пример: 'mpool/out'
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
activations(net,X,layer,'OutputAs','rows')
'OutputAs'
— Формат выходных активаций'channels'
(значение по умолчанию) | 'rows'
| 'columns'
Формат выходных активаций, заданных как пара, разделенная запятой, состоящая из 'OutputAs'
и одно из следующего:
Значение 'OutputAs' | Формат выходных активаций |
---|---|
'channels' | h-by-w-by-c-by-n массив, где h, w и c являются высотой, шириной и количеством каналов для вывода выбранного слоя. n является количеством наблюдений в X . Каждым h-by-w-by-c подмассив является вывод для одного наблюдения. |
'rows' | n-by-m матрица, где n является количеством наблюдений и m , является количеством выходных элементов от выбранного слоя. |
'columns' | m-by-n матрица, где m является количеством выходных элементов от выбранного слоя и n, является количеством наблюдений. Каждым столбцом матрицы является вывод для одного наблюдения. |
Если значение 'OutputAs'
равняется 'channels'
, то изображения во входных данных X
могут быть больше, чем входной размер входного слоя изображений сети. Для других выходных форматов изображения в X
должны иметь тот же размер как входной размер входного слоя изображений сети.
Пример: 'OutputAs','rows'
'MiniBatchSize'
— Размер мини-пакетовРазмер мини-пакетов, чтобы использовать для прогноза, заданного как положительное целое число. Большие мини-пакетные размеры требуют большей памяти, но могут привести к более быстрым прогнозам.
Пример: 'MiniBatchSize',256
'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'
только доступна для входных данных, заданных как числовой массив, массив ячеек числовых массивов, таблицы или datastore изображений. Никакие другие типы datastore не поддерживают опцию 'mex'
.
Опция 'mex'
только доступна, когда вы используете графический процессор. Необходимо было также установить компилятор C/C++. Для инструкций по настройке смотрите Setup MEX (GPU Coder).
Ускорение 'mex'
не поддерживает все слои. Для списка поддерживаемых слоев смотрите Поддерживаемые Слои (GPU Coder).
Пример: 'Acceleration','mex'
Среда выполнения
Аппаратный ресурс'auto'
(значение по умолчанию) | 'gpu'
| 'cpu'
Аппаратный ресурс, заданный как пара, разделенная запятой, состоящая из 'ExecutionEnvironment'
и одно из следующего:
'auto'
Используйте графический процессор, если вы доступны; в противном случае используйте центральный процессор.
'gpu'
— Используйте графический процессор. Используя графический процессор требует Parallel Computing Toolbox, и CUDA включил NVIDIA, графический процессор с вычисляет возможность 3.0 или выше. Если Parallel Computing Toolbox или подходящий графический процессор не доступны, то программное обеспечение возвращает ошибку.
'cpu'
— Используйте центральный процессор.
Пример: 'ExecutionEnvironment','cpu'
features
— Активации от сетевого слояАктивации от сетевого слоя, возвращенного как одно из следующего, в зависимости от значения аргумента пары "имя-значение" '
OutputAs
'
.
features | Значение 'OutputAs' |
---|---|
h-by-w-by-c-by-n массив | 'channels' |
n-by-m матрица | 'rows' |
m-by-n матрица | 'columns' |
Здесь h, w и c являются высотой, шириной и количеством каналов для вывода выбранного слоя, n является количеством наблюдений в X
, и m = hwc является общим количеством функций.
Все функции для обучения глубокому обучению, прогноза и валидации в Deep Learning Toolbox™ выполняют вычисления с помощью арифметики с плавающей точкой, с одинарной точностью. Функции для глубокого обучения включают trainNetwork
, predict
, classify
и activations
. Программное обеспечение использует арифметику с одинарной точностью, когда вы обучаете нейронные сети с помощью и центральных процессоров и графических процессоров.
Указания и ограничения по применению:
Вход X
не должен иметь переменного размера. Размер должен быть зафиксирован во время генерации кода.
Аргумент layer
должен быть постоянным.
Только аргумент пары "имя-значение" 'OutputAs'
поддерживается. Значением должен быть 'channels'
.
Для получения дополнительной информации о генерации кода для глубоких нейронных сетей, смотрите Рабочий процесс для Генерации кода Глубокого обучения с MATLAB Coder (MATLAB Coder).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.