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

网站开发选asp还是hph杭州网络科技设计中心

网站开发选asp还是hph,杭州网络科技设计中心,宁波住房和城乡建设网站,企业建设流程本文为此系列的第二篇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.dnsts.com.cn/news/117114.html

相关文章:

  • 青岛制作公司网站wordpress界面英文版
  • 江宁区建设工程局网站页游网站
  • 外贸开发网站开发产品备案号查询官网
  • 南京电商网站开发公司wordpress建站服务
  • 做网站赚什么钱西安专业网站建设公司排名
  • 网站相册源码vps网站管理助手教程
  • 网站建设的公司开发方案企业注册地址变更流程
  • .net微信网站开发广州建设大马路小学网站
  • 站外推广策划书上海企业网站制作
  • 电脑做系统ppt下载网站wordpress站点语言
  • 那个网站可以做空比特币网站建设可以自学吗
  • 重庆铜梁网站建设费用南京网站设计个人
  • 建个网站用多少钱多少钱网站设计
  • 德国建设部网站查企业信息的软件
  • 手机新手学做网站vue做网站首页
  • 网站制作公司网址用织梦的网站怎么做推广
  • 大航母网站建设费用dw做的网站如何用手机看
  • 学做网站论坛怎么样从入门到精通网站建设
  • 手机网站建站教育模板公司简介宣传册设计样本图片
  • 宁波公司网站制作济南代理公司注册
  • 网站怎么做长截图电子商务的发展现状和前景趋势
  • 网站建设及数据分析鞍山建站
  • 中国建设银行门户网站企业全国做旅游开发的公司
  • 广西建设执业资格注册中心网站wordpress ueditor 教程
  • 校园论坛网站建设论文asp网站图片轮播代码
  • 网站上传文件存储方式湖北网络科技有限公司
  • 网站运营岗位介绍西安专业网站建设服务好
  • 湖北建设厅造价网站谁做的12306网站
  • 上海网站建设求职简历速卖通开店流程及费用
  • 网站黑链教育学校网站建设