importTensorFlowLayers

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

    Описание

    пример

    lgraph = importTensorFlowLayers(modelFolder) возвращает layers из сети TensorFlow™ от папки modelFolder, который содержит модель в сохраненном формате модели (совместимый только с TensorFlow 2). Функция импортирует слои, заданные в saved_model.pb файл и изученные веса содержатся в variables подпапка, и возвращает lgraph как LayerGraph объект.

    importTensorFlowLayers требует Конвертера Deep Learning Toolbox™ для пакета поддержки Моделей TensorFlow. Если этот пакет поддержки не установлен, то importTensorFlowLayers обеспечивает ссылку на загрузку.

    Примечание

    importTensorFlowLayers попытки сгенерировать пользовательский слой, когда вы импортируете пользовательский слой TensorFlow или когда программное обеспечение не может преобразовать слой TensorFlow на эквивалентный встроенный в MATLAB® слой. Для списка слоев, для которых программное обеспечение поддерживает преобразование, см. Слои TensorFlow-Keras, Поддержанные для Преобразования на Встроенные Слои MATLAB.

    importTensorFlowLayers сохраняет сгенерированные пользовательские слои и связанные операторы TensorFlow в пакете +modelFolder.

    importTensorFlowLayers автоматически не генерирует пользовательский слой для каждого слоя TensorFlow, который не поддерживается для преобразования на встроенный слой MATLAB. Для получения дополнительной информации о том, как обработать неподдерживаемые слои, смотрите Советы.

    пример

    lgraph = importTensorFlowLayers(modelFolder,Name,Value) импортирует слои и веса от сети TensorFlow с дополнительными опциями, заданными одним или несколькими аргументами значения имени. Например, 'OutputLayerType','classification' добавляет классификацию выходной слой в конец импортированной сетевой архитектуры.

    Примеры

    свернуть все

    Импортируйте предварительно обученную сеть TensorFlow в сохраненном формате модели как LayerGraph объект. Затем соберите импортированные слои в DAGNetwork объект и использование собранная сеть, чтобы классифицировать изображение.

    Задайте папку модели.

    if ~exist('digitsDAGnet','dir')
        unzip('digitsDAGnet.zip')
    end
    modelFolder = './digitsDAGnet';

    Задайте имена классов.

    classNames = {'0','1','2','3','4','5','6','7','8','9'};

    Импортируйте слои и веса сети TensorFlow в сохраненном формате модели. По умолчанию, importTensorFlowLayers импортирует сеть как LayerGraph объект, совместимый с DAGNetwork объект. Задайте выходной тип слоя для проблемы классификации изображений.

    lgraph = importTensorFlowLayers(modelFolder,'OutputLayerType','classification')
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation
    
    lgraph = 
      LayerGraph with properties:
    
             Layers: [13×1 nnet.cnn.layer.Layer]
        Connections: [13×2 table]
         InputNames: {'input_1'}
        OutputNames: {'ClassificationLayer_activation_1'}
    
    

    Отобразите последний слой импортированной сети. Выход показывает тот importTensorFlowLayers добавляет ClassificationOutputLayer в конец сетевой архитектуры.

    lgraph.Layers(end)
    ans = 
      ClassificationOutputLayer with properties:
    
                Name: 'ClassificationLayer_activation_1'
             Classes: 'auto'
        ClassWeights: 'none'
          OutputSize: 'auto'
    
       Hyperparameters
        LossFunction: 'crossentropyex'
    
    

    Слой классификации не содержит классы, таким образом, необходимо задать их прежде, чем собрать сеть. Если вы не задаете классы, то программное обеспечение автоматически устанавливает классы на 1, 2N, где N количество классов.

    Слой классификации имеет имя 'ClassificationLayer_activation_1'. Установите классы на classNames и затем замените импортированный слой классификации на новый.

    cLayer = lgraph.Layers(end);
    cLayer.Classes = classNames;
    lgraph = replaceLayer(lgraph,'ClassificationLayer_activation_1',cLayer);

    Соберите график слоев с помощью assembleNetwork возвратить DAGNetwork объект.

    net = assembleNetwork(lgraph)
    net = 
      DAGNetwork with properties:
    
             Layers: [13×1 nnet.cnn.layer.Layer]
        Connections: [13×2 table]
         InputNames: {'input_1'}
        OutputNames: {'ClassificationLayer_activation_1'}
    
    

    Считайте изображение, которое вы хотите классифицировать.

    digitDatasetPath = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
    I = imread(fullfile(digitDatasetPath,'5','image4009.png'));

    Классифицируйте изображение с помощью импортированной сети.

    label = classify(net,I);

    Отобразите изображение и результат классификации.

    imshow(I)
    title(['Classification result ' classNames{label}])

    Импортируйте предварительно обученную сеть TensorFlow в сохраненном формате модели как LayerGraph объект, совместимый с dlnetwork объект. Затем преобразуйте LayerGraph возразите против dlnetwork классифицировать изображение.

    Задайте папку модели.

    if ~exist('digitsDAGnet','dir')
        unzip('digitsDAGnet.zip')
    end
    modelFolder = './digitsDAGnet';

    Задайте имена классов.

    classNames = {'0','1','2','3','4','5','6','7','8','9'};

    Импортируйте сеть TensorFlow как слои, совместимые с dlnetwork объект.

    lgraph = importTensorFlowLayers(modelFolder,'TargetNetwork','dlnetwork')
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation
    
    lgraph = 
      LayerGraph with properties:
    
             Layers: [12×1 nnet.cnn.layer.Layer]
        Connections: [12×2 table]
         InputNames: {'input_1'}
        OutputNames: {1×0 cell}
    
    

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

    digitDatasetPath = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
    I = imread(fullfile(digitDatasetPath,'5','image4009.png'));
    size(I)
    ans = 1×2
    
        28    28
    
    

    Преобразуйте импортированный график слоев в dlnetwork объект.

    dlnet = dlnetwork(lgraph);

    Отобразите входной размер сети. В этом случае размер изображения совпадает с сетевым входным размером. Если они не соответствуют, необходимо изменить размер изображения при помощи imresize(I, netInputSize(1:2)).

    dlnet.Layers(1).InputSize
    ans = 1×3
    
        28    28     1
    
    

    Преобразуйте изображение в dlarray. Отформатируйте изображения с размерностями 'SSCB' (пространственный, пространственный, канал, пакет). В этом примере пакетный размер равняется 1, и можно не использовать его ('SSC').

    I_dlarray = dlarray(single(I),'SSCB');

    Классифицируйте демонстрационное изображение и найдите предсказанную метку.

    prob = predict(dlnet,I_dlarray);
    [~,label] = max(prob);

    Отобразите изображение и результат классификации.

    imshow(I)
    title(['Classification result ' classNames{label}])

    Импортируйте предварительно обученную сеть TensorFlow в сохраненном формате модели как LayerGraph объект. Затем соберите импортированные слои в DAGNetwork объект. Импортированная сеть содержит слои, которые не поддерживаются для преобразования на встроенные слои MATLAB. Программное обеспечение автоматически генерирует пользовательские слои, когда вы импортируете эти слои.

    Этот пример использует функцию помощника findCustomLayers. Чтобы просмотреть код для этой функции, смотрите Функцию Помощника.

    Задайте папку модели.

    if ~exist('digitsDAGnetwithnoise','dir')
        unzip('digitsDAGnetwithnoise.zip')
    end
    modelFolder = './digitsDAGnetwithnoise';

    Задайте имена классов.

    classNames = {'0','1','2','3','4','5','6','7','8','9'};

    Импортируйте слои и веса сети TensorFlow в сохраненном формате модели. По умолчанию, importTensorFlowLayers импортирует сеть как LayerGraph объект, совместимый с DAGNetwork объект. Задайте выходной тип слоя для проблемы классификации изображений.

    lgraph = importTensorFlowLayers(modelFolder,'OutputLayerType','classification');
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation
    

    Если импортированная сеть содержит слои, не поддержанные для преобразования на встроенные слои MATLAB, то importTensorFlowLayers может автоматически сгенерировать пользовательские слои вместо этих слоев. importTensorFlowLayers сохраняет каждый сгенерированный пользовательский слой в отдельный .m файл в пакете +digitsDAGnetwithnoise в текущей папке.

    Найдите индексы автоматически сгенерированных пользовательских слоев, с помощью функции помощника findCustomLayers, и отобразите пользовательские слои.

    ind = findCustomLayers(lgraph.Layers,'+digitsDAGnetwithnoise');
    lgraph.Layers(ind)
    ans = 
      2×1 Layer array with layers:
    
         1   'gaussian_noise_1'   GaussianNoise   digitsDAGnetwithnoise.kGaussianNoise1Layer3766
         2   'gaussian_noise_2'   GaussianNoise   digitsDAGnetwithnoise.kGaussianNoise2Layer3791
    

    Слой классификации не содержит классы, таким образом, необходимо задать их прежде, чем собрать сеть. Если вы не задаете классы, то программное обеспечение автоматически устанавливает классы на 1, 2N, где N количество классов.

    Слой классификации имеет имя 'ClassificationLayer_activation_1'. Установите классы на classNames и затем замените импортированный слой классификации на новый.

    cLayer = lgraph.Layers(end);
    cLayer.Classes = classNames;
    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]
         InputNames: {'input_1'}
        OutputNames: {'ClassificationLayer_activation_1'}
    
    

    Функция помощника

    Этот раздел предоставляет код функции помощника findCustomLayers используемый в этом примере. findCustomLayers возвращает indices из пользовательских слоев, что importTensorFlowNetwork автоматически генерирует.

    function indices = findCustomLayers(layers,PackageName)
    
    s = what(['.\' PackageName]);
    
    indices = zeros(1,length(s.m));
    for i = 1:length(layers)
        for j = 1:length(s.m)
            if strcmpi(class(layers(i)),[PackageName(2:end) '.' s.m{j}(1:end-2)])
                indices(j) = i;
            end
        end
    end
    
    end

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

    свернуть все

    Имя папки, содержащей модель TensorFlow в виде вектора символов или строкового скаляра. modelFolder должен быть в текущей папке, или необходимо включать полный или относительный путь в папку. modelFolder должен содержать файл saved_model.pb, и подпапка variables. Это может также содержать подпапки assets и assets.extra.

    • Файл saved_model.pb содержит архитектуру графика слоев и опции обучения (например, оптимизатор, потери и метрики).

    • Подпапка variables содержит веса, изученные предварительно обученной сетью TensorFlow. По умолчанию, importTensorFlowLayers импортирует веса.

    • Подпапка assets содержит дополнительные файлы (например, словари), который может использовать график слоев. importTensorFlowLayers не импортирует файлы в assets.

    • Подпапка assets.extra содержит дополнительные файлы (например, информация для пользователей), которые сосуществуют с графиком слоев.

    Пример: 'MobileNet'

    Пример: './MobileNet'

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

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

    Пример: importTensorFlowLayers(modelFolder,'TargetNetwork','dagnetwork','OutputLayerType','classification') импортирует слоя сети и веса от modelFolder, сохраняет автоматически сгенерированные пользовательские слои в пакете +modelFolder в текущей папке, указывает, что импортированные слои совместимы с DAGNetwork объект, и добавляет классификацию выходной слой в конец импортированных слоев.

    Имя пакета, в который importTensorFlowLayers сохраняет пользовательские слои в виде вектора символов или строкового скаляра. importTensorFlowLayers сохраняет пользовательский пакет слоев +PackageName в текущей папке. Если вы не задаете 'PackageName'то importTensorFlowLayers сохраняет пользовательские слои в пакете, названном +modelFolder в текущей папке. Для получения дополнительной информации о пакетах смотрите, что Пакеты Создают Пространства имен.

    importTensorFlowLayers попытки сгенерировать пользовательский слой, когда вы импортируете пользовательский слой TensorFlow или когда программное обеспечение не может преобразовать слой TensorFlow на эквивалентный встроенный слой MATLAB. importTensorFlowLayers сохраняет каждый сгенерированный пользовательский слой в отдельный .m файл в +PackageName. Чтобы просмотреть или отредактировать пользовательский слой, откройте связанный .m файл. Для получения дополнительной информации о пользовательских слоях смотрите Глубокое обучение Пользовательские Слои.

    Пакет +PackageName может также содержать подпакет +ops, который содержит операторы TensorFlow, которые используются в автоматически сгенерированных пользовательских слоях. importTensorFlowLayers сохраняет связанную функцию MATLAB для каждого оператора в отдельном .m файл в подпакете +ops. Объектные функции dlnetwork, такой как predict функция, используйте эти операторы при взаимодействии с пользовательскими слоями.

    Пример: 'PackageName','MobileNet'

    Пример: 'PackageName','CustomLayers'

    Целевой тип сети Deep Learning Toolbox для импортированной сетевой архитектуры в виде 'dagnetwork' или 'dlnetwork'.

    • Если вы задаете 'TargetNetwork' как 'dagnetwork', импортированная сетевая архитектура совместима с DAGNetwork объект. В этом случае, импортированный lgraph должен включать выходной слой, заданный TensorFlow сохраненная функция потерь модели или аргумент 'OutputLayerType' значения имени.

    • Если вы задаете 'TargetNetwork' как 'dlnetwork', импортированная сетевая архитектура совместима с dlnetwork объект. В этом случае, импортированный lgraph не включает выходной слой.

    Пример: 'TargetNetwork','dlnetwork' импортирует LayerGraph объект, совместимый с dlnetwork объект.

    Тип выходного слоя это importTensorFlowLayers добавляет в конец импортированной сетевой архитектуры в виде 'classification', 'regression', или 'pixelclassification'. Добавление pixelClassificationLayer Объект (Computer Vision Toolbox) требует Computer Vision Toolbox™.

    • Если вы задаете 'TargetNetwork' как 'dagnetwork' и сохраненная модель в modelFolder не задает функцию потерь, необходимо присвоить значение аргументу 'OutputLayerType' значения имени. DAGNetwork объект должен иметь выходной слой.

    • Если вы задаете 'TargetNetwork' как 'dlnetwork', importTensorFlowLayers игнорирует аргумент 'OutputLayerType' значения имени. dlnetwork объект не имеет выходного слоя.

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

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

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

    Индикатор, чтобы отобразить информацию о прогрессе импорта в командном окне в виде числового или логического 1 TRUE) или 0 ложь).

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

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

    свернуть все

    Сетевая архитектура, возвращенная как LayerGraph объект.

    Чтобы использовать импортированный график слоев для предсказания, необходимо преобразовать LayerGraph возразите против DAGNetwork или dlnetwork объект. Задайте аргумент 'TargetNetwork' значения имени как 'dagnetwork' или 'dlnetwork' в зависимости от намеченного рабочего процесса.

    • Преобразуйте LayerGraph к DAGNetwork при помощи assembleNetwork. На DAGNetwork объект, вы затем предсказываете метки класса с помощью classify функция.

    • Преобразуйте LayerGraph к dlnetwork при помощи dlnetwork. На dlnetwork объект, вы затем предсказываете метки класса с помощью predict функция. Задайте входные данные как dlarray с помощью правильного формата данных (для получения дополнительной информации, смотрите fmt аргумент dlarray).

    Ограничения

    • importTensorFlowLayers поддержки версии v2.0, v2.1, v.2.2 TensorFlow и v2.3.

    Больше о

    свернуть все

    Слои TensorFlow-Keras, поддержанные для преобразования на встроенные слои MATLAB

    importTensorFlowLayers поддерживает следующие типы слоя TensorFlow-Keras для преобразования на встроенные слои MATLAB, с некоторыми ограничениями.

    Слой TensorFlow-KerasСоответствующий слой Deep Learning Toolbox
    AddadditionLayer

    Activation, с именами активации:

    • 'elu'

    • 'relu'

    • 'linear'

    • 'softmax'

    • 'sigmoid'

    • 'swish'

    • 'tanh'

    Слои:

    Усовершенствованные активации:

    • ELU

    • Softmax

    • ReLU

    • LeakyReLU

    • PReLu*

    Слои:

    AveragePooling2DaveragePooling2dLayer с PaddingValue заданный как 'mean'
    BatchNormalizationbatchNormalizationLayer
    Bidirectional(LSTM(__))bilstmLayer
    ConcatenatedepthConcatenationLayer
    Conv2Dconvolution2dLayer
    Conv2DTransposetransposedConv2dLayer
    CuDNNGRUgruLayer
    CuDNNLSTMlstmLayer
    DensefullyConnectedLayer
    DepthwiseConv2DgroupedConvolution2dLayer
    DropoutdropoutLayer
    EmbeddingwordEmbeddingLayer (Text Analytics Toolbox)
    Flattennnet.keras.layer.FlattenCStyleLayer
    GlobalAveragePooling2DglobalAveragePooling2dLayer
    GlobalMaxPooling2DglobalMaxPooling2dLayer
    GRUgruLayer
    InputimageInputLayer, sequenceInputLayer, или featureInputLayer
    LSTMlstmLayer
    MaxPooling2DmaxPooling2dLayer
    MultiplymultiplicationLayer
    SeparableConv2DgroupedConvolution2dLayer или convolution2dLayer
    TimeDistributedsequenceFoldingLayer перед перенесенным слоем и sequenceUnfoldingLayer после перенесенного слоя
    UpSampling2Dresize2dLayer (Image Processing Toolbox)
    UpSampling3Dresize3dLayer (Image Processing Toolbox)
    ZeroPadding2Dnnet.keras.layer.ZeroPadding2DLayer

    * Для слоя PReLU, importTensorFlowLayers заменяет масштабный коэффициент с векторным знаком на среднее значение векторных элементов. Можно возвратить параметр к вектору после импорта. Для примера смотрите Импорт Слой Keras PReLU.

    Поддерживаемые функции потерь TensorFlow-Keras

    importTensorFlowLayers поддерживает следующие функции потерь Keras:

    • mean_squared_error

    • categorical_crossentropy

    • sparse_categorical_crossentropy

    • binary_crossentropy

    Советы

    • Если импортированная сеть содержит слой, не поддержанный для преобразования на встроенный слой MATLAB (см. Слои TensorFlow-Keras, Поддержанные для Преобразования на Встроенные Слои MATLAB), и importTensorFlowLayers автоматически не генерирует пользовательский слой, затем importTensorFlowLayers вставляет слой заполнителя вместо неподдерживаемого слоя. Чтобы найти имена и индексы неподдерживаемых слоев в сети, используйте findPlaceholderLayers функция. Затем можно заменить слой заполнителя на новый слой, который вы задаете. Чтобы заменить слой, использовать replaceLayer.

    • importTensorFlowLayers может импортировать сети TensorFlow, созданные с последовательным или функциональным API TensorFlow-Keras.

    • Чтобы использовать предварительно обученную сеть для предсказания или передачи обучения на новых изображениях, необходимо предварительно обработать изображения таким же образом изображения, которые использовались, чтобы обучаться, импортированная модель были предварительно обработаны. Наиболее распространенные шаги предварительной обработки изменяют размер изображений, вычитая средние значения изображений, и преобразовывая изображения от изображений BGR до RGB.

      • Чтобы изменить размер изображений, использовать imresize. Например, imresize(image,[227,227,3]).

      • Чтобы преобразовать изображения от RGB до формата BGR, использовать flip. Например, flip(image,3).

      Для получения дополнительной информации о предварительной обработке изображений для обучения и предсказания, смотрите, Предварительно обрабатывают Изображения для Глубокого обучения.

    • Члены пакета +PackageName (пользовательские слои и операторы TensorFlow), не доступны, если родительская папка пакета не находится на пути MATLAB. Для получения дополнительной информации смотрите Пакеты и путь MATLAB.

    Альтернативная функциональность

    Использование importTensorFlowNetwork или importTensorFlowLayers импортировать сеть TensorFlow в сохраненном формате [2] модели. В качестве альтернативы, если сеть находится в HDF5 или формате JSON, использовать importKerasNetwork или importKerasLayers импортировать сеть.

    Ссылки

    [2] Используя формат SavedModel. https://www.tensorflow.org/guide/saved_model.

    Введенный в R2021a