importKerasLayers

Импортируйте слои из сети Keras

Синтаксис

layers = importKerasLayers(modelfile)
layers = importKerasLayers(modelfile,Name,Value)

Описание

пример

layers = importKerasLayers(modelfile) импортирует слои сети TensorFlow™-Keras из образцового файла. Функция возвращает слои, заданные в HDF5 (.h5) или JSON (.json) файл, данный именем файла modelfile.

Эта функция требует Средства импорта Deep Learning Toolbox™ для пакета поддержки Моделей TensorFlow-Keras. Если этот пакет поддержки не установлен, то функция обеспечивает ссылку на загрузку.

пример

layers = importKerasLayers(modelfile,Name,Value) импортирует слои из сети TensorFlow-Keras с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".

Например, importKerasLayers(modelfile,'ImportWeights',true) импортирует сетевые слои и веса из образцового файла modelfile.

Примеры

свернуть все

Загрузите и установите Средство импорта Deep Learning Toolbox для пакета поддержки Моделей TensorFlow-Keras.

Введите importKerasLayers в командной строке.

importKerasLayers

Если Средство импорта Deep Learning Toolbox для пакета поддержки Моделей TensorFlow-Keras не установлено, то функция обеспечивает ссылку на необходимый пакет поддержки в Add-On Explorer. Чтобы установить пакет поддержки, щелкните по ссылке, и затем нажмите Install. Проверяйте, что установка успешна путем импорта слоев из образцового файла 'digitsDAGnet.h5' в командной строке.

modelfile = 'digitsDAGnet.h5';
layers = importKerasLayers(modelfile)
layers = 

  LayerGraph with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]

Если необходимый пакет поддержки установлен, то функция возвращает объект LayerGraph.

Импортируйте сетевые слои из образцового файла digitsDAGnet.h5.

modelfile = 'digitsDAGnet.h5';
layers = importKerasLayers(modelfile) 
layers = 
  LayerGraph with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]

Постройте сетевую архитектуру.

figure
plot(layers)

Задайте сетевой файл, чтобы импортировать.

modelfile = 'digitsDAGnet.h5';

Импортируйте сетевые слои.

layers = importKerasLayers(modelfile)
layers = 
  LayerGraph with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]

Загрузите набор данных для обучения классификатор, чтобы распознать новые цифры.

folder = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(folder, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

Разделите набор данных в наборы обучающих данных и наборы тестов.

numTrainFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainFiles,'randomize');

Установите опции обучения.

options = trainingOptions('sgdm', ...
    'MaxEpochs',10, ...
    'InitialLearnRate',0.001);

Обучите сеть с помощью данных тренировки.

net = trainNetwork(imdsTrain,layers,options);
Training on single GPU.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |        5.47% |       6.4266 |          0.0010 |
|       1 |          50 |       00:00:05 |       81.25% |       0.6227 |          0.0010 |
|       2 |         100 |       00:00:08 |       92.19% |       0.2386 |          0.0010 |
|       3 |         150 |       00:00:12 |       96.88% |       0.0726 |          0.0010 |
|       4 |         200 |       00:00:16 |       97.66% |       0.0871 |          0.0010 |
|       5 |         250 |       00:00:19 |       99.22% |       0.0415 |          0.0010 |
|       6 |         300 |       00:00:23 |       97.66% |       0.0725 |          0.0010 |
|       7 |         350 |       00:00:27 |      100.00% |       0.0291 |          0.0010 |
|       7 |         400 |       00:00:30 |       99.22% |       0.0230 |          0.0010 |
|       8 |         450 |       00:00:34 |       99.22% |       0.0337 |          0.0010 |
|       9 |         500 |       00:00:38 |       99.22% |       0.0120 |          0.0010 |
|      10 |         550 |       00:00:41 |      100.00% |       0.0036 |          0.0010 |
|      10 |         580 |       00:00:44 |      100.00% |       0.0059 |          0.0010 |
|========================================================================================|

Запустите обучивший сеть на наборе тестов, который не использовался, чтобы обучить сеть и предсказать метки изображения (цифры).

YPred = classify(net,imdsTest);
YTest = imdsTest.Labels;

Вычислите точность.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9828

Задайте сетевой файл, чтобы импортировать слои и веса от.

modelfile = 'digitsDAGnet.h5';

Импортируйте сетевую архитектуру и веса из файлов, которые вы задали. Чтобы импортировать веса слоя, задайте 'ImportWeights', чтобы быть true. Функция также импортирует слои с их весами из того же файла HDF5.

layers = importKerasLayers(modelfile,'ImportWeights',true)
layers = 
  LayerGraph with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]

Просмотрите размер весов во втором слое.

weights = layers.Layers(2).Weights;
size(weights)
ans = 1×4

     7     7     1    20

Функция импортировала веса, таким образом, веса слоя непусты.

Задайте сетевой файл, чтобы импортировать слои из и файл, содержащий веса.

modelfile = 'digitsDAGnet.json';
weights = 'digitsDAGnet.weights.h5';

Импортируйте сетевую архитектуру и веса из файлов, которые вы задали. .json файл не включает выходной слой. Задайте выходной слой, так, чтобы importKerasLayers добавил выходной слой в конце архитектуры сетей.

layers = importKerasLayers(modelfile, ...
    'ImportWeights',true, ...
    'WeightFile',weights, ...
    'OutputLayerType','classification')
layers = 
  LayerGraph with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]

Этот пример показывает, как импортировать слои из предварительно обученной сети 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, 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'                          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]

Входные параметры

свернуть все

Имя образцового файла, содержащего сетевую архитектуру, и возможно веса, заданные как вектор символов или скаляр строки. Файл должен быть в текущей папке в папке на пути MATLAB®, или необходимо включать полный или относительный путь в файл.

Если modelfile включает

  • Сетевая архитектура и веса, затем это должен быть в HDF5 (.h5) формат.

  • Только сетевая архитектура, затем это может быть в HDF5 или JSON (.json) формат.

Если modelfile включает только сетевую архитектуру, то можно опционально предоставить веса с помощью аргументов пары "имя-значение" 'ImportWeights' и 'WeightFile'. Если вы предоставляете веса, то файл весов должен быть в формате HDF5.

Пример: 'digitsnet.h5'

Типы данных: char | string

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: importKerasLayers(modelfile,'OutputLayerType','classification') импортирует сетевые слои из образцового файла modelfile и добавляет выходной слой для проблемы классификации в конце слоев Keras.

Тип выходного слоя, который функция добавляет в конец импортированной сетевой архитектуры, когда modelfile не задает функцию потерь, заданную как 'classification', 'regression' или 'pixelclassification'. Добавление объекта pixelClassificationLayer требует Computer Vision Toolbox™.

Пример: 'OutputLayerType','regression'

Размер входа отображает для сети, заданной как вектор двух или трех численных значений, соответствующих [height,width] для полутоновых изображений и [height,width,channels] для цветных изображений, соответственно. Сеть использует эту информацию, когда modelfile не задает входной размер.

Пример: 'ImageInputSize',[28 28]

Индикатор, чтобы импортировать веса, а также сетевую архитектуру, заданную или как false или как true.

  • Если 'ImportWeights' является true, и modelfile включает веса, то importKerasLayers импортирует веса из modelfile, который должен иметь HDF5 (.h5) формат.

  • Если 'ImportWeights' является true, и modelfile не включает веса, то необходимо задать отдельный файл, который включает веса, с помощью аргумента пары "имя-значение" 'WeightFile'.

Пример: 'ImportWeights',true

Типы данных: логический

Имя файла веса, из которого можно импортировать веса, когда modelfile не включает веса, заданные как вектор символов или скаляр строки. Чтобы использовать этот аргумент пары "имя-значение", также необходимо установить 'ImportWeights' на true.

Файл веса должен быть в текущей папке в папке на пути MATLAB, или необходимо включать полный или относительный путь в файл.

Пример: 'WeightFile','weights.h5'

Типы данных: char | string

Выходные аргументы

свернуть все

Сетевая архитектура, возвращенная как массив Layer, возражает, когда сеть Keras имеет тип Sequential или возвратилась как объект LayerGraph, когда сеть Keras имеет тип Model.

Советы

Ссылки

[1] Keras: библиотека Python Deep Learning. https://keras.io.

Введенный в R2017b