В этом примере показано, как импортировать предварительно обученную сеть TensorFlow™ в сохраненном формате модели при помощи importTensorFlowNetwork
, и затем используйте блок Predict, чтобы классифицировать последовательность изображений в Simulink®. Импортированная сеть содержит слои, которые не поддерживаются для преобразования на встроенные в MATLAB® слои. importTensorFlowNetwork
автоматически генерирует пользовательские слои, когда вы импортируете эти слои. Блок Predict предсказывает ответы для данных во входе при помощи обучившего сеть, что вы задаете использование параметров блоков.
importTensorFlowNetwork
требует Конвертера Deep Learning Toolbox™ для пакета поддержки Моделей TensorFlow. Если этот пакет поддержки не установлен, то importTensorFlowNetwork
обеспечивает ссылку на загрузку.
Загрузите выборочные данные цифры как datastore изображений. imageDatastore
автоматически помечает изображения на основе имен папок и хранит данные как ImageDatastore
объект.
digitDatasetPath = fullfile(matlabroot,"toolbox","nnet","nndemos", ... "nndatasets","DigitDataset"); imds = imageDatastore(digitDatasetPath, ... IncludeSubfolders=true,LabelSource="foldernames");
Для воспроизводимости задайте seed для генератора случайных чисел MATLAB. Случайным образом выберите восемь изображений от datastore изображений, создайте массив изображений inputIms
, и отобразите выбранные изображения при помощи montage
(Image Processing Toolbox).
rng("default") perm = randperm(10000,8); for i = 1:8 inputIms(:,:,:,i) = imread(imds.Files{perm(i)}); end montage(inputIms,size=[1 NaN]);
Задайте папку модели, которая содержит предварительно обученную сеть digitsDAGnetwithnoise
в сохраненном формате модели. digitsDAGnetwithnoise
может классифицировать изображения цифр.
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,Classes=classNames);
Importing the saved model... Translating the model, this may take a few minutes... Finished translation. Assembling network... Import finished.
Анализируйте импортированную сеть. analyzeNetwork
отображает интерактивный график сетевой архитектуры и таблицу, содержащую информацию о слоях сети.
analyzeNetwork(net)
Импортированная сеть содержит слои, которые не поддерживаются для преобразования на встроенные слои MATLAB. Программное обеспечение автоматически генерирует пользовательские слои gaussian_noise_1
и gaussian_noise_2
. Функциональный importTensorFlowNetwork
сохраняет каждый сгенерированный пользовательский слой в отдельный .m
файл в пакете +digitsDAGnetwithnoise
в текущей папке. Для получения дополнительной информации об этих сгенерированных пользовательских слоях смотрите Импорт Сеть TensorFlow с Автоматически сгенерированными Пользовательскими Слоями.
Сохраните импортированную сеть в файле MAT.
filename = "digitsNet.mat"; save(filename,"net")
Этот пример предоставляет модели Simulink slexDigitsImportedNetworkPredictExample.slx
. Можно открыть модель Simulink (обеспеченный в этом примере) или создать новую модель путем выполнения шагов, описанных в этом разделе.
Откройте модель Simulink slexDigitsImportedNetworkPredictExample.slx
.
SimMdlName = "slexDigitsImportedNetworkPredictExample";
open_system(SimMdlName)
1. Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок Predict из библиотеки Deep Learning Toolbox™. Блок Predict предсказывает ответы для данных во входе при помощи обучившего сеть, что вы задаете использование параметров блоков. Вход с блоком может быть h w c N числовым массивом, где h, w, и c являются высотой, шириной и количеством каналов изображений, соответственно, и N является количеством изображений.
Дважды кликните блок Predict, чтобы открыть диалоговое окно Block Parameters. Выберите Network from MAT-file
для Сетевого параметра. Нажмите Browse в разделе File Path, чтобы задать сеть как digitsNet.mat
сеть в текущей папке.
2. Вставьте блок Video from Workspace из библиотеки Computer Vision Toolbox™. Дважды кликните блок Video from Workspace, чтобы открыть диалоговое окно Block Parameters. Задайте Сигнал как inputIms
, Шаг расчета как 1, и Form выход после окончательного значения как Содержащий окончательное значение.
3. Проверяйте, совпадает ли размер входных изображений с сетевым входным размером. Если они не соответствуют, необходимо изменить размер входных данных путем добавления блока Resize от библиотеки Computer Vision Toolbox до модели.
Отобразите размер изображения и входной размер сети.
size(inputIms)
ans = 1×4
28 28 1 8
netInputSize = net.Layers(1).InputSize
netInputSize = 1×3
28 28 1
Вход является последовательностью восьми полутоновых изображений (с одним каналом), которые являются 28 28 пикселями в размере. Размер изображения совпадает с сетевым входным размером.
4. Добавьте блок To Workspace в модель и поменяйте имя переменной на yPred
. Соедините блок Video from Workspace с входом блока Predict и блока To Workspace к выходу блока Predict.
5. Откройте диалоговое окно Configuration Parameters. На вкладке Modeling нажмите Model Settings. При выборе Решателя, Типе набора к Fixed-step
, и Решатель набора к discrete (no continuous states)
.
Симулируйте модель и сохраните симуляцию выход в modelOutput
. Поле modelOutput.yPred.Data
содержит результаты классификации.
modelOutput = sim(SimMdlName)
modelOutput = Simulink.SimulationOutput: tout: [8x1 double] yPred: [1x1 timeseries] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]
Отобразите последовательность изображений и результатов классификации.
tiledlayout(1,12,TileSpacing="None"); for i = 1:size(inputIms,4) nexttile imshow(inputIms(:,:,:,i)) label = modelOutput.yPred.Data(:,:,i)==1; title([classNames{label}],FontSize=20) end
importTensorFlowNetwork
| importKerasNetwork
| importONNXNetwork
| importCaffeNetwork