Поиск слоев заполнителя в сетевой архитектуре, импортированной из Keras или ONNX
возвращает все слои-заполнители, существующие в сетевой архитектуре placeholderLayers
= findPlaceholderLayers(importedLayers
)importedLayers
импортировано importKerasLayers
или importONNXLayers
функций, или созданных functionToLayerGraph
функция. Слои-заполнители являются слоями, которые эти функции вставляют вместо слоев, не поддерживаемых Deep Learning Toolbox™.
Для использования с импортированной сетью этой функции требуется либо пакет поддержки Deep Learning Toolbox Converter for TensorFlow™ Models, либо пакет поддержки Deep Learning Toolbox Converter for ONNX™ Model Format.
[
также возвращает индексы слоев заполнителя.placeholderLayers
,indices
] = findPlaceholderLayers(importedLayers
)
Укажите сетевой файл Keras, из которого будут импортированы слои.
modelfile = 'digitsDAGnetwithnoise.h5';
Импортируйте сетевую архитектуру. Сеть включает некоторые типы слоев, которые не поддерживаются Deep Learning Toolbox. The 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'}
Отображение импортированных слоев сети. Два слоя-заполнителя заменяют слои Гауссова шума в сети Кераса.
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. The 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'}
importedLayers
- Сетевая архитектура, импортированная из Keras или ONNX или созданная functionToLayerGraph
Layer
массив | LayerGraph
объектСетевая архитектура, импортированная из Keras или ONNX или созданная functionToLayerGraph
, заданный как Layer
массив или LayerGraph
объект.
placeholderLayers
- Все слои заполнителя в сетевой архитектуреPlaceholderLayer
объектыВсе заполнители слоев в сетевой архитектуре, возвращенные как массив PlaceholderLayer
объекты.
indices
- Индексы слоев заполнителяИндексы слоев, возвращенные как вектор.
Если importedLayers
- массив слоев, затем indices
индексы заполнителя, слоев в importedLayers
.
Если importedLayers
является LayerGraph
объект, затем indices
индексы заполнителя, слоев в importedLayers.Layers
.
Если вы удаляете слой из или добавляете слой к Layer
массив или LayerGraph
объект, тогда индексы других слоев объекта могут измениться. Вы должны использовать findPlaceholderLayers
еще раз, чтобы найти обновленные индексы остальных слоев.
Если вы установили Deep Learning Toolbox Converter для моделей TensorFlow и findPlaceholderLayers
не удается найти слои, созданные при импорте сети ONNX, а затем попытаться обновить пакет поддержки Deep Learning Toolbox Converter для TensorFlow Models в Add-On Explorer.
assembleNetwork
| functionToLayerGraph
| importKerasLayers
| importONNXLayers
| PlaceholderLayer
| replaceLayer
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.