importTensorFlowNetwork

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

    Описание

    пример

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

    importTensorFlowNetwork требуется пакет поддержки Deep Learning Toolbox™ Converter для моделей 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. Программа автоматически генерирует пользовательские слои при импорте этих слоев.

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

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

    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 в текущей папке.

    Найдите индексы автоматически сгенерированных пользовательских слоев с помощью функции helper 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 function, используйте эти операторы при взаимодействии с пользовательскими слоями.

    Пример: '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'. A DAGNetwork объект должен иметь слой выхода.

    • Если вы задаете 'TargetNetwork' как 'dlnetwork', importTensorFlowNetwork игнорирует аргумент имя-значение 'OutputLayerType'. A 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'. A dlnetwork объект не имеет слоя выхода для хранения информации о классах.

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

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

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

    Индикатор для отображения информации о прогрессе импорта в командном окне, заданный в виде числа или логического 1 (true) или 0 (false).

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

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

    свернуть все

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

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

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

    Ограничения

    • importTensorFlowNetwork поддерживает версии TensorFlow v2.0, v2.1, v.2.2 и 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 (Symbolic Math 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 Loss

    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