主要内容

使用变量自动编码器在NVIDIA GPU上生成数字图像

此示例显示了如何为训练有素的变异自动编码器(VAE)网络生成CUDA®MEX。该示例说明:

  • 以MNIST数据集的方式生成手绘数字图像。

  • CUDA代码生成dlnetwork(深度学习工具箱)代表深度学习网络的对象。

  • 用于Dlarray(深度学习工具箱)代码生成中的对象。

此示例使用基于验证的解码器网络火车变异自动编码器(VAE)生成图像深度学习工具箱™的示例。有关更多信息,请参阅火车变异自动编码器(VAE)生成图像(深度学习工具箱)

第三方先决条件

必需的

  • 启用CUDA的NVIDIA®GPU和兼容驱动程序。

可选的

对于非MEX构建,例如静态,动态库或可执行文件,此示例具有以下其他要求。

验证GPU环境

要验证正确设置用于运行此示例的编译器和库是否正确设置Coder.CheckgPuinstall功能。

envcfg = coder.gpuenvconfig('主持人');envcfg.deeplibtarget ='cudnn';envcfg.deepcodegen = 1;envcfg.quiet = 1;coder.checkgpuinstall(envcfg);

预处理的变异自动编码器网络

自动编码器有两个部分:编码器和解码器。编码器获取图像输入并输出压缩表示(编码),该表示是大小的向量litent_dim在此示例中等于20。解码器采用压缩表示,解码并重新创建原始图像。

VAE与常规自动编码器不同,因为它们不使用编码编码过程来重建输入。取而代之的是,它们在潜在空间上施加了概率分布,并了解分布以使解码器的输出分布与观察到的数据匹配。然后,他们从此分布中取样以生成新​​数据。

此示例使用在火车变异自动编码器(VAE)生成图像例子。要自己训练网络,请参阅火车变异自动编码器(VAE)生成图像(深度学习工具箱)

生成分区的入口点功能

生成入口点功能加载dlnetwork对象从训练有素的Decodervaenet垫子中归档到持久变量,并重用持久对象以进行后续的预测调用。它初始化Dlarray包含25种随机生成的编码的对象通过解码器网络传递,并从深度学习数组对象中提取生成图像的数字数据。

类型('generatevae.m'
函数生成图= generateVae(解码器,litentdim,环境)%#codegen%版权2020-2021 The Mathworks,Inc。持续解码器;如果ISEMPTY(解码器)解码器= coder.LoadDeepLearningNetwork(解码器);end%生成随机噪声randomnoise = dlarray(randn(1,1,latentdim,25,'single'),'sscb');如果coder.target('matlab')&& strcmp(环境,'gpu')randomnoise = gpuarray(rando noise);end%从噪声产生图像= sigmoid(预测(解码器,randomnoise))生成新图像);%从dlarray生成图中提取数字数据= ExtractData(生成图);结尾

评估入口点功能

评估生成入口点功能生成数字图像并绘制结果。

litentDim = 20;矩阵='训练Decodervaenet.mat';env ='';图()标题()()“生成数字样本 -  MATLAB”)生成iMageml = generateVae(矩阵,latentdim,env);imshow(iMtile(生成iMageml,,“缩略图”,[100,100])))

生成Cuda Mex

为生成CUDA代码生成入口点功能,为MEX目标创建GPU代码配置对象,并将目标语言设置为C ++。使用coder.deeplearningconfig函数创建Cudnn深度学习配置对象并将其分配给深度学习GPU代码配置对象的属性。

env ='gpu';cfg = coder.gpuconfig('Mex');cfg.targetlang ='C ++';cfg.deeplearningconfig = coder.deeplearningconfig('cudnn');args = {coder.constant(matfile),coder.constant(latentdim),coder.constant(env)};代码根-configCFG-argsargs生成-报告
代码生成成功:查看报告

要为Tensorrt Target生成CUDA代码,请创建和使用Tensorrt深度学习配置对象而不是Cudnn配置对象。

运行生成的MEX

调用生成的CUDA MEX并显示结果。

图()标题()()“生成数字样本-GPU”)生成iMageGpu = generateVae_mex(矩阵,litentdim,env);imshow(iMtile(生成iMagegpu,,“缩略图”,[100,100])))

也可以看看

功能

对象

相关示例

更多关于