В этом примере показано, как создать функцию MEX для обученной сети вариационного автокодера (VAE), работающей на процессорах Intel ®. Пример иллюстрирует:
В этом примере используется предварительно обученная сеть декодеров, основанная на вариационном автокодере поезда (VAE), для создания примера изображений из Toolbox™ глубокого обучения. Дополнительные сведения см. в разделе Настройка вариационного автокодера (VAE) для создания изображений (панель инструментов глубокого обучения).
Процессор Intel с поддержкой команд Intel Advanced Vector Extensions 2 (Intel AVX2).
Для построений, отличных от MEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.
Библиотека Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Предварительные условия для глубокого обучения с помощью кодера MATLAB
Этот пример не поддерживается в MATLAB ® Online.
Автокодеры имеют две части: кодер и декодер. Кодер принимает входной сигнал изображения и выводит сжатое представление (кодирование), которое является вектором размера latent_dim, равное 20 в этом примере. Декодер принимает сжатое представление, декодирует его и воссоздает исходное изображение.
VAE отличаются от обычных автокодеров тем, что не используют процесс кодирования-декодирования для восстановления входного сигнала. Вместо этого они накладывают распределение вероятности на латентное пространство и изучают распределение так, чтобы распределение выходных сигналов декодера соответствовало распределению наблюдаемых данных. Затем они проводят выборку из этого распределения для создания новых данных.
В этом примере для создания изображений используется сеть декодеров, обученная в вариационном автокодере поезда (VAE). Чтобы обучить сеть самостоятельно, см. раздел Обучающий вариационный автокодировщик (VAE) для создания изображений (панель инструментов глубокого обучения).

generateVAE функция точки входа загружает dlnetwork объект из trainedDecoderVAENet МАТОВОГО файла в постоянную переменную и повторные использования постоянный объект для последующих требований прогноза. Инициализирует dlarray объект, содержащий 25 случайно сформированных кодировок, пропускает их через сеть декодеров и извлекает числовые данные сгенерированного изображения из объекта массива глубокого обучения.
type('generateVAE.m')function generatedImage = generateVAE(decoderNetFileName,latentDim,Environment) %#codegen
% Copyright 2020-2021 The MathWorks, Inc.
persistent decoderNet;
if isempty(decoderNet)
decoderNet = coder.loadDeepLearningNetwork(decoderNetFileName);
end
% Generate random noise
randomNoise = dlarray(randn(1,1,latentDim,25,'single'),'SSCB');
if coder.target('MATLAB') && strcmp(Environment,'gpu')
randomNoise = gpuArray(randomNoise);
end
% Generate new image from noise
generatedImage = sigmoid(predict(decoderNet,randomNoise));
% Extract numeric data from dlarray
generatedImage = extractdata(generatedImage);
end
Оцените generateVAE функция точки входа для создания цифровых изображений и графика результатов.
latentDim = 20; matfile = 'trainedDecoderVAENet.mat'; Env = ''; figure() title("Generated samples of digits - MATLAB") generatedImageML = generateVAE(matfile, latentDim, Env); imshow(imtile(generatedImageML, "ThumbnailSize", [100,100]))

Создание функции MEX для generateVAE создание объекта конфигурации кода для цели MEX и установка целевого языка на C++. Используйте coder.DeepLearningConfig создать объект конфигурации глубокого обучения MKL-DNN и назначить его DeepLearningConfig свойства объекта конфигурации кода.
cfg = coder.config('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); args = {coder.Constant(matfile), coder.Constant(latentDim), coder.Constant(Env)}; codegen -config cfg -args args generateVAE -report
Code generation successful: View report
Вызовите сгенерированный MEX и просмотрите результаты.
figure() title("Generated samples of digits using MKL-DNN") generatedImage = generateVAE_mex(matfile, latentDim, Env); imshow(imtile(generatedImage, "ThumbnailSize", [100,100]))

codegen | coder.config | coder.DeepLearningConfig | dlarray (инструментарий для глубокого обучения) | dlnetwork (инструментарий для глубокого обучения)