В этом примере показано, как сгенерировать MEX-функцию для обученной вариационной сети (VAE) автоэнкодера, которая работает на Intel® CPUs. Пример иллюстрирует:
Генерация нарисованной от руки цифры отображает в стиле набора данных MNIST.
Генерация кода для dlnetwork
Объект (Deep Learning Toolbox), представляющий нейронную сеть для глубокого обучения, пользующуюся библиотекой Intel MKL-DNN.
Использование dlarray
(Deep Learning Toolbox) возражает в генерации кода.
Этот пример использует предварительно обученную сеть декодера на основе Обучения Вариационного Автоэнкодера (VAE), чтобы Сгенерировать пример Изображений от Deep Learning Toolbox™. Для получения дополнительной информации смотрите, Обучают Вариационный Автоэнкодер (VAE) Генерировать Изображения (Deep Learning Toolbox).
Процессор Intel с поддержкой Intel Усовершенствованные Векторные Расширения 2 (Intel AVX2) инструкции.
Для сборок неMEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.
Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Необходимые условия для Глубокого обучения для MATLAB Coder
Этот пример не поддерживается в MATLAB® Online.
Автоэнкодеры имеют две части: энкодер и декодер. Энкодер берет вход изображений и выводит сжатое представление (кодирование), который является вектором из размера latent_dim
, равняйтесь 20 в этом примере. Декодер берет сжатое представление, декодирует его и воссоздает оригинальное изображение.
VAEs отличаются от обычных автоэнкодеров в этом, они не используют декодирующий кодирование процесс, чтобы восстановить вход. Вместо этого они налагают вероятностное распределение на скрытый пробел и изучают распределение так, чтобы распределение выходных параметров от соответствий декодера те из наблюдаемых данных. Затем они производят от этого распределения, чтобы сгенерировать новые данные.
Этот пример использует сеть декодера, обученную в Обучении Вариационного Автоэнкодера (VAE), чтобы Сгенерировать пример Изображений. Чтобы обучить сеть самостоятельно, смотрите, Обучают Вариационный Автоэнкодер (VAE) Генерировать Изображения (Deep Learning Toolbox).
generateVAE
функция точки входа загружает dlnetwork
объект из trainedDecoderVAENet MAT-файла в персистентную переменную и повторные использования постоянный объект для последующих вызовов предсказания. Это инициализирует 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
(Deep Learning Toolbox) | dlnetwork
(Deep Learning Toolbox)