Функциональный слой
Функциональный слой применяет заданную функцию к входу слоя.
Если Deep Learning Toolbox™ не обеспечивает слой, в котором вы нуждаетесь для своей задачи, то можно задать новые слои путем создания функциональных слоев с помощью functionLayer
. Функциональные слои только операции поддержки, которые не требуют дополнительных свойств, настраиваемых параметров или состояний. Для слоев, которые требуют этой функциональности, задайте слой как пользовательский слой. Для получения дополнительной информации смотрите, Задают Пользовательские Слои Глубокого обучения.
создает функциональный слой и устанавливает layer
= functionLayer(fun
)PredictFcn
свойство.
устанавливает дополнительные свойства с помощью одних или нескольких аргументов name-value. Например, layer
= functionLayer(fun
,Name=Value
)functionLayer(fun,NumInputs=2,NumOutputs=3)
указывает, что слой имеет два входных параметров и три выходных параметров. Можно задать несколько аргументов name-value.
PredictFcn
— Функция, чтобы примениться к входу слояЭто свойство доступно только для чтения.
Функция, чтобы примениться к входу слоя в виде указателя на функцию.
Заданная функция должна иметь синтаксис [Y1,...,YM] = fun(X1,...,XN)
, где вводами и выводами является dlarray
объекты и M
и N
соответствуйте NumOutputs
и NumInputs
свойства, соответственно.
Входные параметры X1
, …, XN
соответствуйте входным параметрам слоя с именами, данными InputNames
. Выходные параметры Y1
, …, YM
соответствуйте слою выходные параметры с именами, данными OutputNames
.
Для списка функций та поддержка dlarray
введите, см. Список Функций с Поддержкой dlarray.
Совет
При использовании слоя необходимо гарантировать, что заданная функция доступна. Например, чтобы гарантировать, что слой может быть снова использован в нескольких live скриптах, сохраните функцию в ее собственном отдельном файле.
Типы данных: function_handle
Formattable
— Отметьте указание, что эта функция работает с отформатированным dlarray
объекты
(FALSE) (значение по умолчанию) | 1
TRUEЭто свойство доступно только для чтения.
Отметьте указание, что функция слоя работает с отформатированным dlarray
объекты в виде 0
(FALSE) или 1
TRUE.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
Name
— Имя слоя''
(значение по умолчанию) | вектор символов | строковый скаляр
Имя слоя в виде вектора символов или строкового скаляра. Для Layer
вход массивов, trainNetwork
, assembleNetwork
, layerGraph
, и dlnetwork
функции автоматически присваивают имена к слоям с Name
установите на ''
.
Типы данных: char |
string
Description
— Однострочное описание слояЭто свойство доступно только для чтения.
Однострочное описание слоя в виде строкового скаляра или вектора символов. Это описание появляется, когда слой отображен в Layer
массив.
Если вы не задаете описание слоя, то программное обеспечение отображает операцию слоя.
Типы данных: char |
string
NumInputs
— Количество входных параметровЭто свойство доступно только для чтения.
Количество входных параметров в виде положительного целого числа.
Слой должен иметь постоянное число входных параметров. Если PredictFcn
поддерживает переменное количество входных параметров с помощью varargin
, затем необходимо задать количество входных параметров слоя с помощью NumInputs
.
Если вы не задаете NumInputs
, затем программное обеспечение устанавливает NumInputs
к nargin(PredictFcn)
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
InputNames
— Введите именаЭто свойство доступно только для чтения.
Введите имена слоя в виде положительного целого числа.
Если вы не задаете InputNames
и NumInputs
1
, затем программное обеспечение устанавливает InputNames
к {'in'}
. Если вы не задаете InputNames
и NumInputs
больше 1
, затем программное обеспечение устанавливает InputNames
к {'in1',...,'inN'}
, где N
количество входных параметров.
Типы данных: string
| cell
NumOutputs
— Количество выходных параметров
(значение по умолчанию) | положительное целое числоЭто свойство доступно только для чтения.
Количество выходных параметров слоя в виде положительного целого числа.
Слой должен иметь постоянное число выходных параметров. Если PredictFcn
поддерживает переменное количество выходных аргументов, затем необходимо задать количество слоя выходные параметры с помощью NumOutputs
.
Если вы не задаете NumOutputs
, затем программное обеспечение устанавливает NumOutputs
к nargout(PrecitcFcn)
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputNames
— Выведите именаЭто свойство доступно только для чтения.
Выведите имена слоя в виде массива строк или массива ячеек из символьных векторов.
Если вы не задаете OutputNames
и NumOutputs
1
, затем программное обеспечение устанавливает OutputNames
к {'out'}
. Если вы не задаете OutputNames
и NumOutputs
больше 1
, затем программное обеспечение устанавливает OutputNames
к {'out1',...,'outM'}
, где M
количество выходных параметров.
Типы данных: string
| cell
Создайте функциональный расположенный на слое объект, который применяет softsign операцию к входу. softsign операция дана функцией .
layer = functionLayer(@(X) X./(1 + abs(X)))
layer = FunctionLayer with properties: Name: '' PredictFcn: @(X)X./(1+abs(X)) Formattable: 0 Learnable Parameters No properties. State Parameters No properties. Show all properties
Включайте softsign слой в виде функционального слоя в массиве слоя. Укажите, что слой имеет описание "softsign"
.
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
functionLayer(@(X) X./(1 + abs(X)),Description="softsign")
maxPooling2dLayer(2,Stride=2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer]
layers = 7x1 Layer array with layers: 1 '' Image Input 28x28x1 images with 'zerocenter' normalization 2 '' Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' Function softsign 4 '' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 '' Fully Connected 10 fully connected layer 6 '' Softmax softmax 7 '' Classification Output crossentropyex
Создайте функциональный слой, который переформатировал входные данные с форматом "CB"
(образуйте канал, пакет) иметь формат "SBC"
(пространственный, пакет, канал). Чтобы указать, что слой работает с отформатированными данными, устанавливает Formattable
опция к true
.
layer = functionLayer(@(X) dlarray(X,"SBC"),Formattable=true)
layer = FunctionLayer with properties: Name: '' PredictFcn: @(X)dlarray(X,"SBC") Formattable: 1 Learnable Parameters No properties. State Parameters No properties. Show all properties
Включайте функциональный слой, который переформатировал вход, чтобы иметь формат "SB"
в массиве слоя. Укажите, что слой имеет описание "channel to spatial"
.
layers = [ featureInputLayer(10) functionLayer(@(X) dlarray(X,"SBC"),Formattable=true,Description="channel to spatial") convolution1dLayer(3,16)]
layers = 3x1 Layer array with layers: 1 '' Feature Input 10 features 2 '' Function channel to spatial 3 '' Convolution 16 3 convolutions with stride 1 and padding [0 0]
В этой сети 1D слой свертки применяет операцию свертки по "S"
(пространственная) размерность его входных данных. Это эквивалентно свертке по "C"
(канал) размерность сетевых входных данных.
Преобразуйте массив слоя в dlnetwork
возразите и передайте случайный массив данных с форматом "CB"
.
dlnet = dlnetwork(layers);
X = rand(10,64);
dlX = dlarray(X,"CB");
dlY = forward(dlnet,dlX);
Просмотрите размер и формат выходных данных.
size(dlY)
ans = 1×3
8 16 64
dims(dlY)
ans = 'SCB'
В этом примере показано, как импортировать слои из предварительно обученной сети Keras, замените неподдерживаемые слои на функциональные слои и соберите слои в сеть, готовую к предсказанию.
Импортируйте сеть Keras
Импортируйте слои из сетевой модели Keras. Сеть в "digitsNet.h5"
классифицирует изображения цифр.
filename = "digitsNet.h5";
layers = importKerasLayers(filename,ImportWeights=true)
Warning: Unable to import layer. Keras layer 'Activation' with the specified settings is not supported. The problem was: Activation type 'softsign' is not supported.
Warning: Unable to import layer. Keras layer 'Activation' with the specified settings is not supported. The problem was: Activation type 'softsign' is not supported.
Warning: Unable to import some Keras layers, because they are not supported by the Deep Learning Toolbox. They have been replaced by placeholder layers. To find these layers, call the function findPlaceholderLayers on the returned object.
layers = 13x1 Layer array with layers: 1 'ImageInputLayer' Image Input 28x28x1 images 2 'conv2d' Convolution 8 3x3x1 convolutions with stride [1 1] and padding [0 0 0 0] 3 'conv2d_softsign' PLACEHOLDER LAYER Placeholder for 'Activation' Keras layer 4 'max_pooling2d' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 'conv2d_1' Convolution 16 3x3x8 convolutions with stride [1 1] and padding [0 0 0 0] 6 'conv2d_1_softsign' PLACEHOLDER LAYER Placeholder for 'Activation' Keras layer 7 'max_pooling2d_1' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 8 'flatten' Keras Flatten Flatten activations into 1-D assuming C-style (row-major) order 9 'dense' Fully Connected 100 fully connected layer 10 'dense_relu' ReLU ReLU 11 'dense_1' Fully Connected 10 fully connected layer 12 'dense_1_softmax' Softmax softmax 13 'ClassificationLayer_dense_1' Classification Output crossentropyex
Сеть Keras содержит некоторые слои, которые не поддерживаются Deep Learning Toolbox. importKerasLayers
функция выводит предупреждение и заменяет неподдерживаемые слои на слои заполнителя.
Замените слои заполнителя
Чтобы заменить слои заполнителя, сначала идентифицируйте имена слоев, чтобы заменить. Найдите слои заполнителя с помощью findPlaceholderLayers
функция.
placeholderLayers = findPlaceholderLayers(layers)
placeholderLayers = 2x1 PlaceholderLayer array with layers: 1 'conv2d_softsign' PLACEHOLDER LAYER Placeholder for 'Activation' Keras layer 2 'conv2d_1_softsign' PLACEHOLDER LAYER Placeholder for 'Activation' Keras layer
Замените слои заполнителя на функциональные слои с функцией, заданной softsign
функция, перечисленная в конце примера.
Создайте функциональный слой с функцией, заданной softsign
функция, присоединенная к этому примеру как вспомогательный файл. Чтобы получить доступ к этой функции, откройте этот пример как live скрипт. Установите описание слоя на "softsign"
.
layer = functionLayer(@softsign,Description="softsign");
Замените слои с помощью replaceLayer
функция. Использовать replaceLayer
функция, сначала преобразуйте массив слоя в график слоев.
lgraph = layerGraph(layers); lgraph = replaceLayer(lgraph,"conv2d_softsign",layer); lgraph = replaceLayer(lgraph,"conv2d_1_softsign",layer);
Задайте имена классов
Если импортированный слой классификации не содержит классы, то необходимо задать их перед предсказанием. Если вы не задаете классы, то программное обеспечение автоматически устанавливает классы на 1
, 2N
, где N
количество классов.
Найдите индекс слоя классификации путем просмотра Layers
свойство графика слоев.
lgraph.Layers
ans = 13x1 Layer array with layers: 1 'ImageInputLayer' Image Input 28x28x1 images 2 'conv2d' Convolution 8 3x3x1 convolutions with stride [1 1] and padding [0 0 0 0] 3 'layer' Function softsign 4 'max_pooling2d' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 'conv2d_1' Convolution 16 3x3x8 convolutions with stride [1 1] and padding [0 0 0 0] 6 'layer_1' Function softsign 7 'max_pooling2d_1' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 8 'flatten' Keras Flatten Flatten activations into 1-D assuming C-style (row-major) order 9 'dense' Fully Connected 100 fully connected layer 10 'dense_relu' ReLU ReLU 11 'dense_1' Fully Connected 10 fully connected layer 12 'dense_1_softmax' Softmax softmax 13 'ClassificationLayer_dense_1' Classification Output crossentropyex
Слой классификации имеет имя 'ClassificationLayer_dense_1'
. Просмотрите слой классификации и проверяйте Classes
свойство.
cLayer = lgraph.Layers(end)
cLayer = ClassificationOutputLayer with properties: Name: 'ClassificationLayer_dense_1' Classes: 'auto' ClassWeights: 'none' OutputSize: 'auto' Hyperparameters LossFunction: 'crossentropyex'
Поскольку Classes
свойством слоя является "auto"
, необходимо задать классы вручную. Установите классы на 0
, 1, ..., 9
, и затем замените импортированный слой классификации на новый.
cLayer.Classes = string(0:9);
lgraph = replaceLayer(lgraph,"ClassificationLayer_dense_1",cLayer);
Соберите сеть
Соберите график слоев с помощью assembleNetwork
. Функция возвращает DAGNetwork
объект, который готов использовать для предсказания.
net = assembleNetwork(lgraph)
net = DAGNetwork with properties: Layers: [13x1 nnet.cnn.layer.Layer] Connections: [12x2 table] InputNames: {'ImageInputLayer'} OutputNames: {'ClassificationLayer_dense_1'}
Тестирование сети
Сделайте предсказания с сетью с помощью набора тестовых данных.
[XTest,YTest] = digitTest4DArrayData; YPred = classify(net,XTest);
Просмотрите точность.
mean(YPred == YTest)
ans = 0.9900
Визуализируйте предсказания в матрице беспорядка.
confusionchart(YTest,YPred)
layerGraph
| findPlaceholderLayers
| PlaceholderLayer
| connectLayers
| disconnectLayers
| addLayers
| removeLayers
| assembleNetwork
| replaceLayer
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.