В этом примере показано, как сгенерировать CUDA® MEX для обученной вариационной сети (VAE) автоэнкодера. Пример иллюстрирует:
Этот пример использует предварительно обученную сеть декодера на основе Обучения Вариационного Автоэнкодера (VAE), чтобы Сгенерировать пример Изображений от Deep Learning Toolbox™. Для получения дополнительной информации смотрите, Обучают Вариационный Автоэнкодер (VAE) Генерировать Изображения (Deep Learning Toolbox).
CUDA включил NVIDIA® графический процессор и совместимый драйвер.
Для сборок неMEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.
NVIDIA инструментарий CUDA.
Библиотека NVIDIA cuDNN.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Стороннее Оборудование и Подготовку Необходимых как условие продуктов.
Чтобы проверить, что компиляторы и библиотеки для выполнения этого примера настраиваются правильно, используйте coder.checkGpuInstall
функция.
envCfg = coder.gpuEnvConfig('host'); envCfg.DeepLibTarget = 'cudnn'; envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
Автоэнкодеры имеют две части: энкодер и декодер. Энкодер берет вход изображений и выводит сжатое представление (кодирование), который является вектором из размера 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]))
Сгенерировать код CUDA для generateVAE
функция точки входа, создайте объект настройки графического процессора кода для цели MEX и установите выходной язык на C++. Используйте coder.DeepLearningConfig
функция, чтобы создать настройку глубокого обучения CuDNN возражает и присвоить ее DeepLearningConfig
свойство объекта настройки графического процессора кода.
Env = 'gpu'; cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); args = {coder.Constant(matfile), coder.Constant(latentDim), coder.Constant(Env)}; codegen -config cfg -args args generateVAE -report
Code generation successful: View report
Чтобы сгенерировать код CUDA для цели TensorRT, создайте и используйте объект настройки глубокого обучения TensorRT вместо объекта настройки CuDNN.
Вызовите сгенерированный MEX CUDA и отобразите результаты.
figure() title("Generated samples of digits - GPU") generatedImageGPU = generateVAE_mex(matfile, latentDim, Env); imshow(imtile(generatedImageGPU, "ThumbnailSize", [100,100]))
coder.CuDNNConfig
| coder.gpuConfig
| coder.gpuEnvConfig
| coder.TensorRTConfig
| dlarray
(Deep Learning Toolbox) | dlnetwork
(Deep Learning Toolbox)