Слой, заменяющий неподдерживаемый уровень Keras или ONNX или неподдерживаемую функциональность из functionToLayerGraph
PlaceholderLayer является слоем, который importKerasLayers и importONNXLayers вставить в массив слоев или граф слоев вместо неподдерживаемого слоя Keras или ONNX™. Он также может представлять неподдерживаемую функциональность из functionToLayerGraph.
Импорт слоев из сети Keras или ONNX, содержащей слои, которые не поддерживаются Deep Learning Toolbox™ создает PlaceholderLayer объекты. Кроме того, при создании графика слоев с помощью functionToLayerGraph, неподдерживаемая функциональность приводит к PlaceholderLayer объекты.
Name - Имя слояИмя слоя, указанное как символьный вектор или строковый скаляр.
Типы данных: char | string
Description - Описание слояОписание слоя, определяемое как вектор символов или строковый скаляр.
Типы данных: char | string
Type - Тип слояТип слоя, заданный как символьный вектор или строковый скаляр.
Типы данных: char | string
KerasConfiguration - Конфигурация Keras слояКонфигурация Keras слоя, заданная как структура. Поля структуры зависят от типа слоя.
Примечание
Это свойство существует, только если слой был создан при импорте сети Keras.
Типы данных: struct
ONNXNode - Конфигурация уровня ONNXКонфигурация ONNX слоя, заданная как структура. Поля структуры зависят от типа слоя.
Примечание
Это свойство существует только в том случае, если слой был создан при импорте сети ONNX.
Типы данных: struct
Weights - Импортированные весаИмпортированные веса, указанные как структура.
Типы данных: struct
Укажите сетевой файл Keras для импорта слоев.
modelfile = 'digitsDAGnetwithnoise.h5';Импортируйте сетевую архитектуру. Сеть включает в себя некоторые типы слоев, которые не поддерживаются Deep Learning Toolbox. importKerasLayers функция заменяет каждый неподдерживаемый слой слоем-заполнителем и возвращает предупреждающее сообщение.
lgraph = importKerasLayers(modelfile)
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.
lgraph =
LayerGraph with properties:
Layers: [15x1 nnet.cnn.layer.Layer]
Connections: [15x2 table]
InputNames: {'input_1'}
OutputNames: {'ClassificationLayer_activation_1'}
Отображение импортированных слоев сети. Два слоя-заполнителя заменяют гауссовы шумовые слои в сети Keras.
lgraph.Layers
ans =
15x1 Layer array with layers:
1 'input_1' Image Input 28x28x1 images
2 'conv2d_1' Convolution 20 7x7 convolutions with stride [1 1] and padding 'same'
3 'conv2d_1_relu' ReLU ReLU
4 'conv2d_2' Convolution 20 3x3 convolutions with stride [1 1] and padding 'same'
5 'conv2d_2_relu' ReLU ReLU
6 'gaussian_noise_1' PLACEHOLDER LAYER Placeholder for 'GaussianNoise' Keras layer
7 'gaussian_noise_2' PLACEHOLDER LAYER Placeholder for 'GaussianNoise' Keras layer
8 'max_pooling2d_1' Max Pooling 2x2 max pooling with stride [2 2] and padding 'same'
9 'max_pooling2d_2' Max Pooling 2x2 max pooling with stride [2 2] and padding 'same'
10 'flatten_1' Keras Flatten Flatten activations into 1-D assuming C-style (row-major) order
11 'flatten_2' Keras Flatten Flatten activations into 1-D assuming C-style (row-major) order
12 'concatenate_1' Depth concatenation Depth concatenation of 2 inputs
13 'dense_1' Fully Connected 10 fully connected layer
14 'activation_1' Softmax softmax
15 'ClassificationLayer_activation_1' Classification Output crossentropyex
Поиск слоев-заполнителей с помощью findPlaceholderLayers. Выходной аргумент содержит два слоя-заполнителя, которые importKerasLayers вставляется вместо гауссовых шумовых слоев сети Кераса.
placeholders = findPlaceholderLayers(lgraph)
placeholders =
2x1 PlaceholderLayer array with layers:
1 'gaussian_noise_1' PLACEHOLDER LAYER Placeholder for 'GaussianNoise' Keras layer
2 'gaussian_noise_2' PLACEHOLDER LAYER Placeholder for 'GaussianNoise' Keras layer
Укажите имя для каждого слоя-заполнителя.
gaussian1 = placeholders(1); gaussian2 = placeholders(2);
Отображение конфигурации каждого слоя-заполнителя.
gaussian1.KerasConfiguration
ans = struct with fields:
trainable: 1
name: 'gaussian_noise_1'
stddev: 1.5000
gaussian2.KerasConfiguration
ans = struct with fields:
trainable: 1
name: 'gaussian_noise_2'
stddev: 0.7000
В этом примере показано, как импортировать слои из предварительно подготовленной сети Keras, заменить неподдерживаемые слои пользовательскими и собрать слои в сеть, готовую для прогнозирования.
Импорт сети Keras
Импортируйте слои из сетевой модели Keras. Сеть в 'digitsDAGnetwithnoise.h5' классифицирует изображения цифр.
filename = 'digitsDAGnetwithnoise.h5'; lgraph = importKerasLayers(filename,'ImportWeights',true);
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.
Сеть Keras содержит некоторые слои, которые не поддерживаются Deep Learning Toolbox. importKerasLayers функция отображает предупреждение и заменяет неподдерживаемые слои слоями-местозаполнителями.
Печать графика слоев с помощью plot.
figure
plot(lgraph)
title("Imported Network")
Заменить слои-заполнители
Чтобы заменить слои-заполнители, сначала определите имена слоев для замены. Поиск слоев-заполнителей с помощью findPlaceholderLayers.
placeholderLayers = findPlaceholderLayers(lgraph)
placeholderLayers =
2x1 PlaceholderLayer array with layers:
1 'gaussian_noise_1' PLACEHOLDER LAYER Placeholder for 'GaussianNoise' Keras layer
2 'gaussian_noise_2' PLACEHOLDER LAYER Placeholder for 'GaussianNoise' Keras layer
Отображение конфигураций Keras этих слоев.
placeholderLayers.KerasConfiguration
ans = struct with fields:
trainable: 1
name: 'gaussian_noise_1'
stddev: 1.5000
ans = struct with fields:
trainable: 1
name: 'gaussian_noise_2'
stddev: 0.7000
Определите пользовательский уровень гауссова шума. Чтобы создать этот слой, сохраните файл gaussianNoiseLayer.m в текущей папке. Затем создайте два уровня шума Гаусса с теми же конфигурациями, что и импортированные слои Keras.
gnLayer1 = gaussianNoiseLayer(1.5,'new_gaussian_noise_1'); gnLayer2 = gaussianNoiseLayer(0.7,'new_gaussian_noise_2');
Замена слоев-заполнителей пользовательскими слоями с помощью replaceLayer.
lgraph = replaceLayer(lgraph,'gaussian_noise_1',gnLayer1); lgraph = replaceLayer(lgraph,'gaussian_noise_2',gnLayer2);
Печать обновленного графика слоев с помощью plot.
figure
plot(lgraph)
title("Network with Replaced Layers")
Указать имена классов
Если импортированный слой классификации не содержит классов, их необходимо указать до прогнозирования. Если классы не указаны, то программа автоматически устанавливает классы на 1, 2, ..., N, где N - количество классов.
Найдите индекс классификационного слоя, просмотрев Layers свойство графа слоев.
lgraph.Layers
ans =
15x1 Layer array with layers:
1 'input_1' Image Input 28x28x1 images
2 'conv2d_1' Convolution 20 7x7x1 convolutions with stride [1 1] and padding 'same'
3 'conv2d_1_relu' ReLU ReLU
4 'conv2d_2' Convolution 20 3x3x1 convolutions with stride [1 1] and padding 'same'
5 'conv2d_2_relu' ReLU ReLU
6 'new_gaussian_noise_1' Gaussian Noise Gaussian noise with standard deviation 1.5
7 'new_gaussian_noise_2' Gaussian Noise Gaussian noise with standard deviation 0.7
8 'max_pooling2d_1' Max Pooling 2x2 max pooling with stride [2 2] and padding 'same'
9 'max_pooling2d_2' Max Pooling 2x2 max pooling with stride [2 2] and padding 'same'
10 'flatten_1' Keras Flatten Flatten activations into 1-D assuming C-style (row-major) order
11 'flatten_2' Keras Flatten Flatten activations into 1-D assuming C-style (row-major) order
12 'concatenate_1' Depth concatenation Depth concatenation of 2 inputs
13 'dense_1' Fully Connected 10 fully connected layer
14 'activation_1' Softmax softmax
15 'ClassificationLayer_activation_1' Classification Output crossentropyex
Классификационный слой имеет имя 'ClassificationLayer_activation_1'. Просмотрите классификационный слой и проверьте Classes собственность.
cLayer = lgraph.Layers(end)
cLayer =
ClassificationOutputLayer with properties:
Name: 'ClassificationLayer_activation_1'
Classes: 'auto'
ClassWeights: 'none'
OutputSize: 'auto'
Hyperparameters
LossFunction: 'crossentropyex'
Потому что Classes свойство слоя 'auto', необходимо указать классы вручную. Установите классы в значение 0, 1, ..., 9, а затем замените импортированный классификационный слой новым.
cLayer.Classes = string(0:9)
cLayer =
ClassificationOutputLayer with properties:
Name: 'ClassificationLayer_activation_1'
Classes: [0 1 2 3 4 5 6 7 8 9]
ClassWeights: 'none'
OutputSize: 10
Hyperparameters
LossFunction: 'crossentropyex'
lgraph = replaceLayer(lgraph,'ClassificationLayer_activation_1',cLayer);Собрать сеть
Собрать график слоев с помощью assembleNetwork. Функция возвращает DAGNetwork объект, который готов к использованию для прогнозирования.
net = assembleNetwork(lgraph)
net =
DAGNetwork with properties:
Layers: [15x1 nnet.cnn.layer.Layer]
Connections: [15x2 table]
InputNames: {'input_1'}
OutputNames: {'ClassificationLayer_activation_1'}
assembleNetwork | findPlaceholderLayers | functionToLayerGraph | importKerasLayers | importONNXLayers
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.