个人网站发布怎么做,企业网站颜色,seo优化的主要任务包括,贵阳手机端网站建设文章目录 网络介绍生成器和判别器的博弈过程数据集可视化模型细节训练过程网络优缺点优点缺点 网络介绍
GAN通过设计生成模型和判别模型这两个模块#xff0c;使其互相博弈学习产生了相当好的输出。
GAN模型的核心在于提出了通过对抗过程来估计生成模型这一全新框架。在这个… 文章目录 网络介绍生成器和判别器的博弈过程数据集可视化模型细节训练过程网络优缺点优点缺点 网络介绍
GAN通过设计生成模型和判别模型这两个模块使其互相博弈学习产生了相当好的输出。
GAN模型的核心在于提出了通过对抗过程来估计生成模型这一全新框架。在这个框架中将会同时训练两个模型——捕捉数据分布的生成模型和估计样本是否来自训练数据的判别模型。
在训练过程中生成器会不断尝试通过生成更好的假图像来骗过判别器而判别器在这过程中也会逐步提升判别能力。这种博弈的平衡点是当生成器生成的假图像和训练数据图像的分布完全一致时判别器拥有50%的真假判断置信度。
生成器和判别器的博弈过程
在训练刚开始的时候生成器和判别器的质量都比较差生成器会随机生成一个数据分布。判别器通过求取梯度和损失函数对网络进行优化将靠近真实数据分布的数据判定为1将靠近生成器生成出来数据分布的数据判定为0。生成器通过优化生成出更加贴近真实数据分布的数据。生成器所生成的数据和真实数据达到相同的分布此时判别器的输出为1/2。
过程如下图所示 在上图中蓝色虚线表示判别器黑色虚线表示真实数据分布绿色实线表示生成器生成的虚假数据分布表示隐码表示生成的虚假图像 () 。
数据集可视化
import matplotlib.pyplot as pltdata_iter next(mnist_ds.create_dict_iterator(output_numpyTrue))
figure plt.figure(figsize(3, 3))
cols, rows 5, 5
for idx in range(1, cols * rows 1):image data_iter[image][idx]figure.add_subplot(rows, cols, idx)plt.axis(off)plt.imshow(image.squeeze(), cmapgray)
plt.show()模型细节
下面介绍本网络用到的生成器、判别器及损失函数和优化器
生成器 Generator 的功能是将隐码映射到数据空间。由于数据是图像这一过程也会创建与真实图像大小相同的灰度图像(或 RGB 彩色图像)。在本案例演示中该功能通过五层 Dense 全连接层来完成的每层都与 BatchNorm1d 批归一化层和 ReLU 激活层配对输出数据会经过 Tanh 函数使其返回 [-1,1] 的数据范围内。注意实例化生成器之后需要修改参数的名称不然静态图模式下会报错。判别器 Discriminator 是一个二分类网络模型输出判定该图像为真实图的概率。主要通过一系列的 Dense 层和 LeakyReLU 层对其进行处理最后通过 Sigmoid 激活函数使其返回 [0, 1] 的数据范围内得到最终概率。损失函数使用MindSpore中二进制交叉熵损失函数BCELoss 这里生成器和判别器都是使用Adam优化器但是需要构建两个不同名称的优化器分别用于更新两个模型的参数详情见下文代码。注意优化器的参数名称也需要修改。
训练过程
import os
import time
import matplotlib.pyplot as plt
import mindspore as ms
from mindspore import Tensor, save_checkpointtotal_epoch 12 # 训练周期数
batch_size 64 # 用于训练的训练集批量大小# 加载预训练模型的参数
pred_trained False
pred_trained_g ./result/checkpoints/Generator99.ckpt
pred_trained_d ./result/checkpoints/Discriminator99.ckptcheckpoints_path ./result/checkpoints # 结果保存路径
image_path ./result/images # 测试结果保存路径# 生成器计算损失过程
def generator_forward(test_noises):fake_data net_g(test_noises)fake_out net_d(fake_data)loss_g adversarial_loss(fake_out, ops.ones_like(fake_out))return loss_g# 判别器计算损失过程
def discriminator_forward(real_data, test_noises):fake_data net_g(test_noises)fake_out net_d(fake_data)real_out net_d(real_data)real_loss adversarial_loss(real_out, ops.ones_like(real_out))fake_loss adversarial_loss(fake_out, ops.zeros_like(fake_out))loss_d real_loss fake_lossreturn loss_d# 梯度方法
grad_g ms.value_and_grad(generator_forward, None, net_g.trainable_params())
grad_d ms.value_and_grad(discriminator_forward, None, net_d.trainable_params())def train_step(real_data, latent_code):# 计算判别器损失和梯度loss_d, grads_d grad_d(real_data, latent_code)optimizer_d(grads_d)loss_g, grads_g grad_g(latent_code)optimizer_g(grads_g)return loss_d, loss_g# 保存生成的test图像
def save_imgs(gen_imgs1, idx):for i3 in range(gen_imgs1.shape[0]):plt.subplot(5, 5, i3 1)plt.imshow(gen_imgs1[i3, 0, :, :] / 2 0.5, cmapgray)plt.axis(off)plt.savefig(image_path /test_{}.png.format(idx))# 设置参数保存路径
os.makedirs(checkpoints_path, exist_okTrue)
# 设置中间过程生成图片保存路径
os.makedirs(image_path, exist_okTrue)net_g.set_train()
net_d.set_train()# 储存生成器和判别器loss
losses_g, losses_d [], []for epoch in range(total_epoch):start time.time()for (iter, data) in enumerate(mnist_ds):start1 time.time()image, latent_code dataimage (image - 127.5) / 127.5 # [0, 255] - [-1, 1]image image.reshape(image.shape[0], 1, image.shape[1], image.shape[2])d_loss, g_loss train_step(image, latent_code)end1 time.time()if iter % 10 10:print(fEpoch:[{int(epoch):3d}/{int(total_epoch):3d}], fstep:[{int(iter):4d}/{int(iter_size):4d}], floss_d:{d_loss.asnumpy():4f} , floss_g:{g_loss.asnumpy():4f} , ftime:{(end1 - start1):3f}s, flr:{lr:6f})end time.time()print(time of epoch {} is {:.2f}s.format(epoch 1, end - start))losses_d.append(d_loss.asnumpy())losses_g.append(g_loss.asnumpy())# 每个epoch结束后使用生成器生成一组图片gen_imgs net_g(test_noise)save_imgs(gen_imgs.asnumpy(), epoch)# 根据epoch保存模型权重文件if epoch % 1 0:save_checkpoint(net_g, checkpoints_path /Generator%d.ckpt % (epoch))save_checkpoint(net_d, checkpoints_path /Discriminator%d.ckpt % (epoch))网络优缺点
优点
生成数据自然 GAN通过生成器和判别器的对抗训练生成的图像数据具有高度的自然性和逼真度。这种自然性使得GAN在图像生成、图像修复、图像超分辨率等领域具有广泛应用。训练效率高 GAN的创新之处在于其两个神经网络的对抗训练方式这种训练方式简单易控且能够显著改善生成式模型的训练效率。
缺点
训练不稳定 GAN的训练过程可能不稳定容易出现模式崩溃等问题。模式崩溃表现为生成器开始退化总是生成同样的样本点无法继续学习。这可能是由于生成器和判别器之间的对抗关系过于复杂导致训练难以达到稳定的纳什均衡状态。计算资源需求高 GAN的训练过程需要大量的计算资源和时间。特别是对于大规模的数据集和高分辨率的图像GAN的训练成本可能非常高昂。此外GAN中的神经网络结构通常较为复杂这也需要大量的存储空间来支持。
此章节学习到此结束感谢昇思平台。