В этом примере показано, как импортировать слои из предварительно обученной сети Keras, замените неподдерживаемые слои на пользовательские слои и соберите слои в сеть, готовую к предсказанию.
Импортируйте сеть Keras
Импортируйте слои из сетевой модели Keras. Сеть в 'digitsDAGnetwithnoise.h5'
классифицирует изображения цифр.
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
.
Замените слои заполнителя
Чтобы заменить слои заполнителя, сначала идентифицируйте имена слоев, чтобы заменить. Найдите слои заполнителя с помощью findPlaceholderLayers
.
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 этих слоев.
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.
Замените слои заполнителя на пользовательские слои с помощью replaceLayer
.
Постройте обновленный график слоев с помощью plot
.
Задайте имена классов
Если импортированный слой классификации не содержит классы, то необходимо задать их перед предсказанием. Если вы не задаете классы, то программное обеспечение автоматически устанавливает классы на 1
, 2
N
, где N
количество классов.
Найдите индекс слоя классификации путем просмотра 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 =
ClassificationOutputLayer with properties:
Name: 'ClassificationLayer_activation_1'
Classes: 'auto'
ClassWeights: 'none'
OutputSize: 'auto'
Hyperparameters
LossFunction: 'crossentropyex'
Поскольку Classes
свойством слоя является 'auto'
, необходимо задать классы вручную. Установите классы на 0
, 1
, ..., 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'
Соберите сеть
Соберите график слоев с помощью assembleNetwork
. Функция возвращает DAGNetwork
объект, который готов использовать для предсказания.
net =
DAGNetwork with properties:
Layers: [15x1 nnet.cnn.layer.Layer]
Connections: [15x2 table]
InputNames: {'input_1'}
OutputNames: {'ClassificationLayer_activation_1'}