exponenta event banner

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. При импорте этих слоев программа автоматически создает пользовательские слои.

    В этом примере используется вспомогательная функция 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) требуется Toolbox™ Computer Vision.

    • При указании '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Соответствующий слой набора инструментов для глубокого обучения
    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(Панель инструментов для анализа текста)
    Flattennnet.keras.layer.FlattenCStyleLayer
    GlobalAveragePooling2DglobalAveragePooling2dLayer
    GlobalMaxPooling2DglobalMaxPooling2dLayer
    GRUgruLayer
    InputimageInputLayer, sequenceInputLayer, или featureInputLayer
    LSTMlstmLayer
    MaxPooling2DmaxPooling2dLayer
    MultiplymultiplicationLayer
    SeparableConv2DgroupedConvolution2dLayer или convolution2dLayer
    TimeDistributedsequenceFoldingLayer перед обернутым слоем, и sequenceUnfoldingLayer после обернутого слоя
    UpSampling2Dresize2dLayer(Панель инструментов обработки изображений)
    UpSampling3Dresize3dLayer(Панель инструментов обработки изображений)
    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 для импорта сети.

    Ссылки

    [1] ТензорПоток. https://www.tensorflow.org/.

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

    Представлен в R2021a