exponenta event banner

активации

Вычислять активации сетевого уровня глубокого обучения

Описание

Можно вычислить активизацию сетевого уровня глубокого обучения на CPU или GPU. Для использования графического процессора требуется Toolbox™ параллельных вычислений и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Укажите требования к оборудованию с помощью ExecutionEnvironment аргумент пары имя-значение.

act = activations(net,imds,layer) возвращает сетевые активации для определенного уровня с использованием обученной сети net и данные изображения в хранилище данных изображения imds.

act = activations(net,ds,layer) возвращает сетевые активации с использованием данных в хранилище данных ds.

act = activations(net,X,layer) возвращает сетевые активации с использованием изображения или данных элемента в числовом массиве X.

act = activations(net,X1,...,XN) возвращает сетевые активации для данных в числовых массивах X1, …, XN для mutli-input сети net. Вход Xi соответствует сетевому входу net.InputNames(i).

act = activations(net,sequences,layer) возвращает сетевые активации для повторяющейся сети (например, сети LSTM или GRU), где sequences содержит предикторы последовательности или временных рядов.

act = activations(net,tbl,layer) возвращает сетевые активации с использованием данных в таблице tbl.

пример

act = activations(___,Name,Value) возвращает сетевые активации с дополнительными параметрами, заданными одним или несколькими аргументами пары имя-значение. Например, 'OutputAs','rows' задает формат выходных данных активации как 'rows'. Укажите аргументы пары имя-значение после всех других входных аргументов.

Примеры

свернуть все

В этом примере показано, как извлечь изученные особенности изображения из предварительно обученной сверточной нейронной сети и использовать их для обучения классификатора изображений. Извлечение характеристик - самый простой и быстрый способ использования репрезентативной силы предварительно подготовленных глубоких сетей. Например, можно обучить вспомогательную векторную машину (SVM) с помощью fitcecoc (Статистика и Toolbox™ машинного обучения) по извлеченным функциям. Поскольку извлечение функций требует только одного прохода через данные, это хорошая отправная точка, если у вас нет графического процессора для ускорения обучения сети с помощью.

Загрузить данные

Распакуйте и загрузите образцы изображений как хранилище данных изображений. imageDatastore автоматически помечает изображения на основе имен папок и сохраняет данные в виде ImageDatastore объект. Хранилище данных изображения позволяет хранить большие данные изображения, включая данные, которые не помещаются в память. Разбейте данные на 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);

I = imtile(imds, 'Frames', idx);

figure
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Загрузить предварительно обученную сеть

Загрузите предварительно обученную сеть SqueeEcNet. SqueeeNet обучен работе с более чем миллионом изображений и может классифицировать изображения по 1000 категориям объектов, например, клавиатура, мышь, карандаш и многие животные. В результате модель получила богатые представления элементов для широкого спектра изображений.

net = squeezenet;

Проанализируйте архитектуру сети.

analyzeNetwork(net)

Первый слой, изображение ввело слой, требует входных изображений размера 227 на 227 на 3, где 3 количество цветных каналов.

inputSize = net.Layers(1).InputSize
inputSize = 1×3

   227   227     3

Извлечь элементы изображения

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

Сеть требует входных изображений размером 227-на-227-на-3, но изображения в хранилищах данных изображений имеют разные размеры. Чтобы автоматически изменить размер обучающих и тестовых изображений перед их вводом в сеть, создайте хранилища данных дополненных изображений, укажите требуемый размер изображения и используйте эти хранилища данных в качестве входных аргументов для activations.

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);

layer = 'pool10';
featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows');
featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');

Извлеките метки класса из данных обучения и тестирования.

YTrain = imdsTrain.Labels;
YTest = imdsTest.Labels;

Классификатор изображения подгонки

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

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

Figure contains 4 axes. Axes 1 with title MathWorks Cap contains an object of type image. Axes 2 with title MathWorks Cube contains an object of type image. Axes 3 with title MathWorks Playing Cards contains an object of type image. Axes 4 with title MathWorks Screwdriver contains an object of type image.

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

accuracy = mean(YPred == YTest)
accuracy = 1

Этот SVM имеет высокую точность. Если точность недостаточно высока с помощью извлечения элементов, попробуйте перенести обучение.

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

свернуть все

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

Хранилище данных изображения, указанное как ImageDatastore объект.

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

Совет

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

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

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

Сетевая архитектураВыходные данные хранилища данныхПример вывода
Одиночный вход

Таблица или массив ячеек, где первый столбец определяет предикторы.

Элементы таблицы должны быть скалярами, векторами строк или массивами ячеек 1 на 1, содержащими числовой массив.

Пользовательские хранилища данных должны выводить таблицы.

data = read(ds)
data =

  4×1 table

        Predictors    
    __________________

    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
data = read(ds)
data =

  4×1 cell array

    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
Множественный вход

Массив ячеек по крайней мере с numInputs столбцы, где numInputs - количество сетевых входов.

Первое numInputs столбцы задают предикторы для каждого ввода.

Порядок входных данных задается InputNames свойство сети.

data = read(ds)
data =

  4×2 cell array

    {224×224×3 double}    {128×128×3 double}
    {224×224×3 double}    {128×128×3 double}
    {224×224×3 double}    {128×128×3 double}
    {224×224×3 double}    {128×128×3 double}

Формат предикторов зависит от типа данных.

ДанныеФормат предикторов
2-D изображение

h-by-w-by-c числовой массив, где h, w и c - высота, ширина и количество каналов изображения соответственно.

3-D изображение

h-by-w-by-d-by-c числовой массив, где h, w, d и c - высота, ширина, глубина и количество каналов изображения соответственно.

Векторная последовательность

матрица c-by-s, где c - число признаков последовательности, а s - длина последовательности.

2-D последовательность изображений

h-by-w-by-c-by-s массив, где h, w и c соответствуют высоте, ширине и количеству каналов изображения соответственно, а s - длина последовательности.

Каждая последовательность в мини-партии должна иметь одинаковую длину.

3-D последовательность изображений

h-by-w-d-by-c-by-s массив, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов изображения, соответственно, и s - длина последовательности.

Каждая последовательность в мини-партии должна иметь одинаковую длину.

Особенности

вектор столбца c-by-1, где c - количество элементов.

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

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

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

Если массив содержит NaNs, затем они распространяются по сети.

Для сетей с несколькими входами можно указать несколько массивов X1, …, XN, где N - количество сетевых входов и входов Xi соответствует сетевому входу net.InputNames(i).

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

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

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

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

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

Таблица данных изображения или элемента. Каждая строка в таблице соответствует наблюдению.

Расположение предикторов в столбцах таблицы зависит от типа входных данных.

ВходПредсказатели
Данные изображения
  • Абсолютный или относительный путь к изображению, заданный как символьный вектор в одном столбце

  • Изображение, указанное как 3-D числовой массив

Укажите предикторы в одном столбце.

Данные о характеристиках

Числовой скаляр.

Укажите предикторы в первом numFeatures столбцы таблицы, где numFeatures - количество признаков входных данных.

Этот аргумент поддерживает сети только с одним входом.

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

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

Вычисление активаций 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'. Описание различных форматов вывода см. в разделе act.

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

Пример: 'OutputAs','rows'

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

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

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

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

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

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

Дополнительные сведения об эффекте заполнения, усечения и разделения входных последовательностей см. в разделах Заполнение последовательности, усечение и разделение.

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

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

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

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

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

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

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

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

Дополнительные сведения об эффекте заполнения, усечения и разделения входных последовательностей см. в разделах Заполнение последовательности, усечение и разделение.

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

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

  • 'mex' - Компиляция и выполнение функции MEX. Эта опция доступна только при использовании графического процессора. Для использования графического процессора требуется панель параллельных вычислений и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Если панель инструментов Parallel Computing Toolbox или подходящий графический процессор недоступны, программа возвращает ошибку.

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

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

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

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

'mex' доступна только при использовании графического процессора. Необходимо установить компилятор C/C + + и пакет поддержки GPU Coder™ Interface for Deep Learning Libraries. Установите пакет поддержки с помощью проводника Add-On в MATLAB. Инструкции по установке см. в разделе Настройка MEX (кодер графического процессора). Кодер графического процессора не требуется.

'mex' не поддерживает все слои. Список поддерживаемых слоев см. в разделе Поддерживаемые слои (кодер графического процессора). Рецидивирующие нейронные сети (RNN), содержащие sequenceInputLayer не поддерживаются.

'mex' не поддерживает сети с несколькими входными слоями или с несколькими выходными слоями.

Нельзя использовать MATLAB Compiler™ для развертывания сети при использовании 'mex' вариант.

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

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

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

  • 'gpu' - Использовать графический процессор. Для использования графического процессора требуется панель параллельных вычислений и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Если панель инструментов Parallel Computing Toolbox или подходящий графический процессор недоступны, программа возвращает ошибку.

  • 'cpu' - Использовать ЦП.

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

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

свернуть все

Активации с сетевого уровня, возвращаемые в виде числового массива или массива ячеек числовых массивов. Формат act зависит от типа входных данных, типа вывода слоя и 'OutputAs' вариант.

Вывод изображения или сложенной последовательности

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

'OutputAs'act
'channels'

Для вывода 2-D изображения: act - массив h-by-w-by-c-by-n, где h, w и c - высота, ширина и количество каналов для вывода выбранного слоя соответственно, а n - количество изображений. В этом случае act(:,:,:,i) содержит активации для iтретье изображение.

Для вывода 3-D изображения: act является массивом h-by-w-d-by-c-by-n, где h, w, d и c - высота, ширина, глубина и количество каналов для вывода выбранного слоя соответственно, а n - количество изображений. В этом случае act(:,:,:,:,i) содержит активации для iтретье изображение.

Для вывода последовательности сложенных 2-D изображений, act является массивом h-by-w-by-c-by- (n * s), где h, w и c - высота, ширина и количество каналов для выхода выбранного слоя, соответственно, n - количество последовательностей, а s - длина последовательности. В этом случаеact(:,:,:,(t-1)*n+k) содержит активации для временного шага t из kВ-й последовательности.

Для вывода последовательности сложенных 3-D изображений, act является массивом h-by-w-by-d-by-c-by- (n * s), где h, w, d и c - высота, ширина, глубина и количество каналов для выхода выбранного слоя, соответственно, n - число последовательностей, а s - длина последовательности. В этом случаеact(:,:,:,:,(t-1)*n+k) содержит активации для временного шага t из kВ-й последовательности.

'rows'

Для вывода 2-D и 3-D изображения: act - матрица n-by-m, где n - количество изображений и m - количество выходных элементов слоя. В этом случае act(i,:) содержит активации для iтретье изображение.

Для сложенных 2-D и 3-D вывода последовательности изображений, act - матрица (n * s) по m, где n - число последовательностей, s - длина последовательности, иm - количество выходных элементов слоя. В этом случае act((t-1)*n+k,:) содержит активации для временного шага t из kВ-й последовательности.

'columns'

Для вывода 2-D и 3-D изображения: act - матрица m-на-n, где m - количество выходных элементов выбранного слоя, а n - количество изображений. В этом случае act(:,i) содержит активации для iтретье изображение.

Для сложенных 2-D и 3-D вывода последовательности изображений, act - матрица m-by- (n * s), где m - количество выходных элементов выбранного слоя, n - количество последовательностей, s - длина последовательности. В этом случаеact(:,(t-1)*n+k) содержит активации для временного шага t из kВ-й последовательности.

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

Если layer имеет вывод последовательности (например, уровни LSTM с режимом вывода) 'sequence'), то act является массивом ячеек. В этом случае 'OutputAs' параметр должен быть 'channels'.

'OutputAs'act
'channels'

Для вывода векторной последовательности act является массивом ячеек n-на-1, матриц c-на-s, где n - число последовательностей, c - число признаков в последовательности, s - длина последовательности.

Для вывода 2-D последовательности изображений: act - массив ячеек n-на-1, из матриц h-на-к-на-с, где n - число последовательностей, h, w и c - высота, ширина и число каналов изображений, соответственно, а s - длина последовательности.

Для вывода 3-D последовательности изображений: act является массивом ячеек n-на-1, из матриц h-на-к-к-д-на-с, где n - число последовательностей, h, w, d и c - высота, ширина, глубина и число каналов изображений, соответственно, а s - длина последовательности.

В этих случаях act{i} содержит активации iВ-й последовательности.

Одношаговый вывод

Если layer выводит один временной шаг последовательности (например, уровень LSTM с режимом вывода) 'last'), то act является числовым массивом.

'OutputAs'act
'channels'

Для одного временного шага, содержащего векторные данные, act является матрицей c-by-n, где n - число последовательностей, а c - число признаков в последовательности.

Для одного временного шага, содержащего 2-D данные изображения, act - массив h-by-w-by-c-by-n, где n - количество последовательностей, h, w и c - высота, ширина и количество каналов изображений соответственно.

Для одного временного шага, содержащего 3-D данные изображения, act - массив h-by-w-by-c-by-d-by-n, где n - количество последовательностей, h, w, d и c - высота, ширина, глубина и количество каналов изображений соответственно.

'rows'матрица n-by-m, где n - число наблюдений, и m - количество выходных элементов выбранного слоя. В этом случае act(i,:) содержит активации для iВ-й последовательности.
'columns'матрица m-на-n, где m - количество выходных элементов выбранного уровня, а n - количество наблюдений. В этом случае act(:,i) содержит активации для iтретье изображение.

Алгоритмы

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

Ссылки

[1] М. Кудо, Дж. Тояма и М. Симбо. «Многомерная классификация кривых с использованием сквозных областей». Буквы распознавания образов. т. 20, № 11-13, стр. 1103-1111.

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

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

..
Представлен в R2016a