当前位置: 首页 > news >正文

合肥网站模板建站永仁县建设信息网站

合肥网站模板建站,永仁县建设信息网站,下载官方版微信,在直播网站做前端注意本文为此系列的第二篇DCGAN#xff0c;上一篇为初级的GAN。普通GAN有训练不稳定、容易陷入局部最优等问题#xff0c;DCGAN相对于普通GAN的优点是能够生成更加逼真、清晰的图像。 因为DCGAN是在GAN的基础上的改造#xff0c;所以本篇只针对GAN的改造点进行讲解#xff0c;其… 本文为此系列的第二篇DCGAN上一篇为初级的GAN。普通GAN有训练不稳定、容易陷入局部最优等问题DCGAN相对于普通GAN的优点是能够生成更加逼真、清晰的图像。 因为DCGAN是在GAN的基础上的改造所以本篇只针对GAN的改造点进行讲解其他还有不太了解的原理可以返回上一篇进行观看。 本文仍然使用MNIST手写数字数据集来构建一个深度卷积GAN(Deep Convolutional GAN)DCGAN将使用卷积来替代全连接层点击查看论文generator的网络结构图如下 DCGAN模型有以下特点 判别器模型使用卷积步长取代了空间池化生成器模型中使用反卷积操作扩大数据维度。除了生成器模型的输出层和判别器模型的输入层在整个对抗网络的其它层上都使用了Batch Normalization原因是Batch Normalization可以稳定学习有助于优化初始化参数值不良而导致的训练问题。整个网络去除了全连接层直接使用卷积层连接生成器和判别器的输入层以及输出层。在生成器的输出层使用Tanh激活函数以控制输出范围而在其它层中均使用了ReLU激活函数在判别器上使用Leaky ReLU激活函数。 代码 model.py from torch import nnclass Generator(nn.Module):def __init__(self, z_dim10, im_chan1, hidden_dim64):super(Generator, self).__init__()self.z_dim z_dim# Build the neural networkself.gen nn.Sequential(self.make_gen_block(z_dim, hidden_dim * 4),self.make_gen_block(hidden_dim * 4, hidden_dim * 2, kernel_size4, stride1),self.make_gen_block(hidden_dim * 2, hidden_dim),self.make_gen_block(hidden_dim, im_chan, kernel_size4, final_layerTrue),)def make_gen_block(self, input_channels, output_channels, kernel_size3, stride2, final_layerFalse):if not final_layer:return nn.Sequential(nn.ConvTranspose2d(input_channels, output_channels, kernel_sizekernel_size, stridestride),nn.BatchNorm2d(output_channels),nn.ReLU(inplaceTrue))else: # Final Layerreturn nn.Sequential(nn.ConvTranspose2d(input_channels, output_channels, kernel_size, stride),nn.Tanh())def unsqueeze_noise(self, noise):return noise.view(len(noise), self.z_dim, 1, 1) # [b,c,h,w]def forward(self, noise):x self.unsqueeze_noise(noise)return self.gen(x)class Discriminator(nn.Module):def __init__(self, im_chan1, hidden_dim16):super(Discriminator, self).__init__()self.disc nn.Sequential(self.make_disc_block(im_chan, hidden_dim),self.make_disc_block(hidden_dim, hidden_dim * 2),self.make_disc_block(hidden_dim * 2, 1, final_layerTrue),)def make_disc_block(self, input_channels, output_channels, kernel_size4, stride2, final_layerFalse):if not final_layer:return nn.Sequential(nn.Conv2d(input_channels, output_channels, kernel_size, stride),nn.BatchNorm2d(output_channels),nn.LeakyReLU(0.2, inplaceTrue))else: # Final Layerreturn nn.Sequential(nn.Conv2d(input_channels, output_channels, kernel_size, stride))def forward(self, image):disc_pred self.disc(image)return disc_pred.view(len(disc_pred), -1)train.py import torch from torch import nn from tqdm.auto import tqdm from torchvision import transforms from torchvision.datasets import MNIST from torchvision.utils import make_grid from torch.utils.data import DataLoader import matplotlib.pyplot as plt from model import * torch.manual_seed(0) # Set for testing purposes, please do not change!def show_tensor_images(image_tensor, num_images25, size(1, 28, 28)):image_tensor (image_tensor 1) / 2image_unflat image_tensor.detach().cpu()image_grid make_grid(image_unflat[:num_images], nrow5)plt.imshow(image_grid.permute(1, 2, 0).squeeze())plt.show()def get_noise(n_samples, z_dim, devicecpu):return torch.randn(n_samples, z_dim, devicedevice)criterion nn.BCEWithLogitsLoss() z_dim 64 display_step 500 batch_size 1280 # A learning rate of 0.0002 works well on DCGAN lr 0.0002beta_1 0.5 beta_2 0.999 device cuda# You can tranform the image values to be between -1 and 1 (the range of the tanh activation) transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,)), ])dataloader DataLoader(MNIST(., downloadFalse, transformtransform),batch_sizebatch_size,shuffleTrue)gen Generator(z_dim).to(device) gen_opt torch.optim.Adam(gen.parameters(), lrlr, betas(beta_1, beta_2)) disc Discriminator().to(device) disc_opt torch.optim.Adam(disc.parameters(), lrlr, betas(beta_1, beta_2))def weights_init(m):if isinstance(m, nn.Conv2d) or isinstance(m, nn.ConvTranspose2d):torch.nn.init.normal_(m.weight, 0.0, 0.02)if isinstance(m, nn.BatchNorm2d):torch.nn.init.normal_(m.weight, 0.0, 0.02)torch.nn.init.constant_(m.bias, 0) gen gen.apply(weights_init) disc disc.apply(weights_init)n_epochs 500 cur_step 0 mean_generator_loss 0 mean_discriminator_loss 0 for epoch in range(n_epochs):# Dataloader returns the batchesfor real, _ in tqdm(dataloader):cur_batch_size len(real)real real.to(device)## Update discriminator ##disc_opt.zero_grad()fake_noise get_noise(cur_batch_size, z_dim, devicedevice)fake gen(fake_noise)disc_fake_pred disc(fake.detach())disc_fake_loss criterion(disc_fake_pred, torch.zeros_like(disc_fake_pred))disc_real_pred disc(real)disc_real_loss criterion(disc_real_pred, torch.ones_like(disc_real_pred))disc_loss (disc_fake_loss disc_real_loss) / 2# Keep track of the average discriminator lossmean_discriminator_loss disc_loss.item() / display_step# Update gradientsdisc_loss.backward(retain_graphTrue)# Update optimizerdisc_opt.step()## Update generator ##gen_opt.zero_grad()fake_noise_2 get_noise(cur_batch_size, z_dim, devicedevice)fake_2 gen(fake_noise_2)disc_fake_pred disc(fake_2)gen_loss criterion(disc_fake_pred, torch.ones_like(disc_fake_pred))gen_loss.backward()gen_opt.step()# Keep track of the average generator lossmean_generator_loss gen_loss.item() / display_step## Visualization code ##if cur_step % display_step 0 and cur_step 0:print(fStep {cur_step}: Generator loss: {mean_generator_loss}, discriminator loss: {mean_discriminator_loss})show_tensor_images(fake)show_tensor_images(real)mean_generator_loss 0mean_discriminator_loss 0cur_step 1每500个batch展示一次。 可以看到生成器的网络模型不再使用全连接使用反卷积操作扩大数据维度在输出层使用Tanh激活函数以控制输出范围而在其它层中均使用了ReLU激活函数在隐藏层中每层都使用BN来讲输出归到一定的范围内来稳定学习使得后层的隐藏单元不过分依赖本层的隐藏单元减弱内部协变量偏移从而加速对特征的学习。 因为不再使用全连接而是使用卷积所以输入的dimension变为channel所以输入之前先改变noise的shape为batch_sizechannelhighwidth。 判别器的网络模型使用卷积代替的全连接使用卷积操作减小数据维度隐藏层中每层在激活之前使用BN。 对生成器和鉴别器的权重进行初始化对于卷积层和转置卷积层也就是反卷积层使用正态分布来初始化权重均值为0标准差为0.02的原因是为了确保权重的初始值具有适当的大小并且不会过大或过小从而避免梯度消失或梯度爆炸的问题。 对于BN化层同样使用正态分布来初始化权重同时将偏置项初始化为0。这是因为批归一化层在训练中通过调整均值和方差来规范化输入数据因此初始的权重和偏置项都设置为较小的值有助于加速网络的收敛。 下一篇构建WGAN_GP。
http://www.w-s-a.com/news/716117/

相关文章:

  • 住房城市乡建设部网站装修平台有哪些
  • 小米网站 用什么做的深圳广告公司前十强
  • 勤哲网站开发视频瑞安 网站建设培训
  • 有个蓝色章鱼做标志的网站高端的网站建设怎么做
  • 建站网址导航hao123html网页设计实验总结
  • 西宁市网站建设价格丽水集团网站建设
  • 长宁怎么做网站优化好本机怎么放自己做的网站
  • 诚信网站备案中心网站字体怎么设置
  • 企业网站建设费是无形资产吗佛山网站建设哪个好点
  • 网站建设就业方向国开行网站毕业申请怎么做
  • 创建一个网站的费用wordpress 4.0 安装
  • 会员登录系统网站建设dw软件是做什么用的
  • 手机网站被做跳转长沙网上购物超市
  • 网站建设中网站需求分析设计网站推荐html代码
  • 容易收录的网站台州汇客网站建设
  • 企业网站源码百度网盘下载网站备案号如何查询密码
  • 个人网站建设课程宣传栏制作效果图
  • 自己做的网站能上传吗网上做彩票网站排名
  • 教育培训网站模板下载自己做商务网站有什么利弊
  • 平面设计公司网站兰州室内设计公司排名
  • 个人工作室注册条件温州seo结算
  • 360免费建站系统中国建设银行官网站黄金部王毅
  • 罗源福州网站建设个体户可以网站备案吗
  • 网站开发 专有名词pc网站建设和推广
  • 上海部道网站 建设conoha wordpress
  • 手机测评做视频网站宝塔可以做二级域名网站么
  • 代理公司注册济南重庆seo优化效果好
  • 佛山市骏域网站建设专家徐州网站建设价格
  • 公司做网站多济南好的网站建设公司排名
  • 网站维护的方式有哪几种该网站在工信部的icp ip地址