importTensorFlowNetwork

Импортируйте предварительно обученную сеть TensorFlow

    Описание

    пример

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

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

    Примечание

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

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

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

    пример

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

    Примеры

    свернуть все

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

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

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

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

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

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

    net = importTensorFlowNetwork(modelFolder,'OutputLayerType','classification','Classes',classNames)
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation. Assembling network...
    Import finished.
    
    net = 
      DAGNetwork with properties:
    
             Layers: [13×1 nnet.cnn.layer.Layer]
        Connections: [13×2 table]
         InputNames: {'input_1'}
        OutputNames: {'ClassificationLayer_activation_1'}
    
    

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

    plot(net)
    title('DAG Network Architecture')

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

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

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

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

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

    label = classify(net,I);

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

    imshow(I)
    title(['Classification result ' char(label)])

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

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

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

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

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

    Импортируйте сеть TensorFlow в сохраненном формате модели как dlnetwork объект.

    net = importTensorFlowNetwork(modelFolder,'TargetNetwork','dlnetwork')
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation. Assembling network...
    Import finished.
    
    net = 
      dlnetwork with properties:
    
             Layers: [12×1 nnet.cnn.layer.Layer]
        Connections: [12×2 table]
         Learnables: [6×3 table]
              State: [0×3 table]
         InputNames: {'input_1'}
        OutputNames: {'activation_1'}
        Initialized: 1
    
    

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

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

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

    netInputSize = net.Layers(1).InputSize
    netInputSize = 1×3
    
        28    28     1
    
    

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

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

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

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

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

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

    Импортируйте предварительно обученную сеть TensorFlow в сохраненном формате модели как 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 в сохраненном формате модели. По умолчанию, importTensorFlowNetwork импортирует сеть как DAGNetwork объект. Задайте выходной тип слоя для проблемы классификации изображений.

    net = importTensorFlowNetwork(modelFolder,'OutputLayerType','classification','Classes',classNames);
    Importing the saved model...
    Translating the model, this may take a few minutes...
    Finished translation. Assembling network...
    Import finished.
    

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

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

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

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

    plot(net)
    title('DAG Network Architecture')

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

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

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

    label = classify(net,I);

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

    imshow(I)
    title(['Classification result ' char(label)])

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

    Этот раздел предоставляет код функции помощника 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. По умолчанию, importTensorFlowNetwork импортирует веса.

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

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

    Пример: 'MobileNet'

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

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

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

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

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

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

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

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

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

    Целевой тип сети Deep Learning Toolbox в виде 'dagnetwork' или 'dlnetwork'.

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

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

    Пример: 'TargetNetwork','dlnetwork'

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

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

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

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

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

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

    Классы выходного слоя в виде категориального вектора, массива строк, массива ячеек из символьных векторов или 'auto'. Если вы задаете массив строк или массив ячеек из символьных векторов strто importTensorFlowNetwork устанавливает классы выходного слоя к categorical(str,str). Если Classes 'auto'то importTensorFlowNetwork устанавливает классы на categorical(1:N), где N количество классов.

    • Если вы задаете 'TargetNetwork' как 'dagnetwork', importTensorFlowNetwork хранит информацию на классах в выходном слое DAGNetwork объект.

    • Если вы задаете 'TargetNetwork' как 'dlnetwork', importTensorFlowNetwork игнорирует аргумент 'Classes' значения имени. dlnetwork объект не имеет выходного слоя, чтобы хранить информацию на классах.

    Пример: 'Classes',{'0','1','3'}

    Пример: 'Classes',categorical({'dog','cat'})

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

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

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

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

    свернуть все

    Предварительно обученная сеть TensorFlow, возвращенная как DAGNetwork или dlnetwork объект.

    • Задайте 'TargetNetwork как 'dagnetwork' импортировать сеть как DAGNetwork объект. На DAGNetwork объект, вы затем предсказываете метки класса при помощи classify функция.

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

    Ограничения

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

    Больше о

    свернуть все

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

    importTensorFlowNetwork поддерживает следующие типы слоя 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, importTensorFlowNetwork заменяет масштабный коэффициент с векторным знаком на среднее значение векторных элементов. Можно возвратить параметр к вектору после импорта. Для примера смотрите Импорт Слой Keras PReLU.

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

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

    • mean_squared_error

    • categorical_crossentropy

    • sparse_categorical_crossentropy

    • binary_crossentropy

    Советы

    • Если импортированная сеть содержит слой, не поддержанный для преобразования на встроенный слой MATLAB (см. Слои TensorFlow-Keras, Поддержанные для Преобразования на Встроенные Слои MATLAB), и importTensorFlowNetwork не генерирует пользовательский слой, затем importTensorFlowNetwork возвращает ошибку. В этом случае можно все еще использовать importTensorFlowLayers импортировать сетевую архитектуру.

    • importTensorFlowNetwork может импортировать сети 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