активации

Вычислите сверточные активации слоя нейронной сети

Можно извлечь функции с помощью обученной сверточной нейронной сети (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 имеет высокую точность. Если точность высоко достаточно не использует выделение признаков, то попробуйте передачу, учащуюся вместо этого.

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

свернуть все

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

activations только поддерживает сети с imageInputLayer или входным слоем image3dInputLayer изображений.

Данные изображения, заданные как одно из следующих.

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

ImageDatastore с метками categorical.

Для получения дополнительной информации смотрите аргумент imds trainNetwork.

Datastore

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

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

Таблица

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

Если значение 'OutputAs' равняется 'channels', то изображения во входных данных X могут быть больше, чем входной размер входного слоя изображений сети. Для других выходных форматов изображения в X должны иметь тот же размер как входной размер входного слоя изображений сети.

Слой, чтобы извлечь функции от, заданный как числовой индекс или вектор символов.

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

Чтобы вычислить активации объекта DAGNetwork, задайте слой как вектор символов, соответствующий имени слоя. Если слой имеет несколько выходных параметров, задайте слой и выведите как имя слоя, сопровождаемое символом “/”, сопровождаемый под названием слой вывод. Таким образом, layer находится на форме 'layerName/outputName'.

Пример 3

Пример: 'conv1'

Пример: 'mpool/out'

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: activations(net,X,layer,'OutputAs','rows')

Формат выходных активаций, заданных как пара, разделенная запятой, состоящая из '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',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' только доступна для входных данных, заданных как числовой массив, массив ячеек числовых массивов, таблицы или datastore изображений. Никакие другие типы datastore не поддерживают опцию 'mex'.

Опция 'mex' только доступна, когда вы используете графический процессор. Необходимо было также установить компилятор C/C++. Для инструкций по настройке смотрите Setup MEX (GPU Coder).

Ускорение 'mex' не поддерживает все слои. Для списка поддерживаемых слоев смотрите Поддерживаемые Слои (GPU Coder).

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

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

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

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

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

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

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

свернуть все

Активации от сетевого слоя, возвращенного как одно из следующего, в зависимости от значения аргумента пары "имя-значение" ' 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. Программное обеспечение использует арифметику с одинарной точностью, когда вы обучаете нейронные сети с помощью и центральных процессоров и графических процессоров.

Расширенные возможности

Введенный в R2016a