课程打卡凭证
DCGAN模型
DCGAN(Deep Convolutional Generative Adversarial Network),即深度卷积生成对抗网络,是一种基于生成对抗网络(GAN)的改进模型,它在生成图像的过程中引入了深度卷积神经网络的架构。
GAN的介绍见昇思25天学习打卡营第16天|GAN图像生成-CSDN博客。DCGAN在生成器使用反卷积层(转置卷积层)从低维噪声向量生成高维图像,而在判别器中则使用卷积层对输入图像进行特征提取。另外,它在生成器和判别器中加入批归一化层,用来加速训练过程并稳定模型,并且去掉了全连接层,使用全卷积结构来处理图像数据。它在生成器使用ReLU激活函数,输出层使用Tanh激活函数;判别器则使用Leaky ReLU激活函数。
训练过程
数据加载与处理
本次实验使用的数据集来自https://download.mindspore.cn/dataset/Faces/faces.zip,共70171张96x96的动漫头像图片。
定义模型参数的初值。
加载faces数据集,并定义数据增强和批处理操作。
可视化数据集,这里用到了matplotlib库中的pyplot模块。
模型训练
构建生成器
生成器的网络结构如下:转置卷积层,用于将输入向量转换为特定形状的输出特征图;二维批标准化层,用于加速收敛并稳定训练过程;修正线性单元激活函数,增加网络的非线性;最后一层是生成器的输出层,将生成的特征图限制在 [-1, 1] 范围内。
构建判别器
判别器的网络结构如下:二维卷积层,用于从输入特征图中提取特征;二维批标准化层,用于加速收敛并稳定训练过程;带泄露的修正线性单元激活函数,增加网络的非线性;最后一层输出单个值,用于二分类(真假)。
定义损失函数和优化器
这里使用了Adam优化器来优化生成器和判别器的参数,构建两个优化器,分别对应两个生成器。损失函数则用常见的交叉熵损失函数。
模型训练
该函数用于计算生成器的前向传播和损失,首先生成随机噪声z作为生成器的输入,然后使用生成器generator生成假图像gen_imgs,最后计算生成器的损失g_loss,该损失衡量生成器欺骗判别器的能力,即使生成的图像被判别器认为是真实的。
该函数用于计算判别器的前向传播和损失。
该函数用于执行一次训练步骤。这里使用了ms.jit进行即时编译,以优化训练速度。
开始训练模型。
训练结果如图所示。
生成器和判别器损失与迭代训练的关系如图所示。
将整个训练过程中生成的图像转成动图,结果如下图所示。