Найдите слои заполнителя в сетевой архитектуре импортированными из Keras или ONNX
возвращает все слои заполнителя, которые существуют в сетевой архитектуре placeholderLayers
= findPlaceholderLayers(importedLayers
)importedLayers
импортированный importKerasLayers
или importONNXLayers
функции, или созданный functionToLayerGraph
функция. Слои заполнителя являются слоями, которые эти функции вставляют вместо слоев, которые не поддержаны Deep Learning Toolbox™.
Чтобы использовать с импортированной сетью, эта функция требует или Средства импорта Deep Learning Toolbox для пакета поддержки Моделей TensorFlow™-Keras или Конвертера Deep Learning Toolbox для пакета поддержки Формата Модели ONNX™.
[
также возвращает индексы слоев заполнителя.placeholderLayers
,indices
] = findPlaceholderLayers(importedLayers
)
Задайте сетевой файл Keras, чтобы импортировать слои из.
modelfile = 'digitsDAGnetwithnoise.h5';
Импортируйте сетевую архитектуру. Сеть включает некоторые типы слоя, которые не поддержаны Deep Learning Toolbox. importKerasLayers
функционируйте заменяет каждый неподдерживаемый слой на слой заполнителя и возвращает предупреждающее сообщение.
lgraph = importKerasLayers(modelfile)
Warning: Unable to import some Keras layers, because they are not yet 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. > In nnet.internal.cnn.keras.importKerasLayers (line 26) In importKerasLayers (line 102) lgraph = LayerGraph with properties: Layers: [15×1 nnet.cnn.layer.Layer] Connections: [15×2 table]
Отобразите импортированные слои сети. Два слоя заполнителя заменяют Гауссовы шумовые слои в сети 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' Flatten C-style Flatten activations into 1D assuming C-style (row-major) order 11 'flatten_2' Flatten C-style Flatten activations into 1D 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 softmax 15 'ClassificationLayer_activation_1' Classification Output crossentropyex
Найдите слои заполнителя с помощью findPlaceholderLayers
. Выходной аргумент содержит два слоя заполнителя что importKerasLayers
вставленный вместо Гауссовых шумовых слоев сети Keras.
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.KerasConfiguration gaussian2.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
В этом примере показано, как импортировать слои из предварительно обученной сети Keras, замените неподдерживаемые слои на пользовательские слои и соберите слои в сеть, готовую к прогнозу.
Импортируйте сеть Keras
Импортируйте слои из сетевой модели Keras. Сеть в 'digitsDAGnetwithnoise.h5'
классифицирует изображения цифр.
filename = 'digitsDAGnetwithnoise.h5'; lgraph = importKerasLayers(filename,'ImportWeights',true);
Warning: Unable to import some Keras layers, because they are not yet 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
, 2N
, где 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' Flatten C-style Flatten activations into 1D assuming C-style (row-major) order 11 'flatten_2' Flatten C-style Flatten activations into 1D 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' 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] OutputSize: 10 Hyperparameters LossFunction: 'crossentropyex'
lgraph = replaceLayer(lgraph,'ClassificationLayer_activation_1',cLayer);
Соберите сеть
Соберите график слоя с помощью assembleNetwork
. Функция возвращает DAGNetwork
объект, который готов использовать в прогнозе.
net = assembleNetwork(lgraph)
net = DAGNetwork with properties: Layers: [15×1 nnet.cnn.layer.Layer] Connections: [15×2 table]
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 для Моделей TensorFlow-Keras и findPlaceholderLayers
не может найти слои заполнителя созданными при импорте сети ONNX, затем попытаться обновить Средство импорта Deep Learning Toolbox для пакета поддержки Моделей TensorFlow-Keras в Add-On Explorer.
PlaceholderLayer
| assembleNetwork
| functionToLayerGraph
| importKerasLayers
| importONNXLayers
| replaceLayer
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.