importKerasLayers

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

Описание

пример

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, 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]

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

свернуть все

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

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

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

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

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

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

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

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

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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