深度卷积生成对抗网络(DCGAN)|完整代码实现

生成对抗网络(GAN)由Ian Goodfellow在2014年提出。GAN通过训练两个神经网络解决了非监督问题。这两个网络一个称为生成网络,一个称为判别网络。

事实上,该网络的训练过程很有趣。我们可以借助一个例子来理解。最初,伪造者(生成网络)向警察(判别网络)展示假币,警察识别出币是假的,伪造者根据接收到的反馈制造了新的假币,如此重复多次,直到伪造者可以造出警察无法识别的假币。

图片

在GAN中,也就是最后得到了可以生成和真实图片非常类似的生成网络,以及可以高度识别伪造品的判别网络

训练的过程就是两个网络互相博弈的过程,最后达到纳什均衡

DCGAN则是GAN的一个变体,它在生成网络和判别网络中使用了卷积层和转置卷积层。

代码如下:

import torchimport torchvisionfrom torch import nnfrom torch import optimfrom torchvision import transformsfrom torchvision.datasets import CIFAR10import matplotlib.pyplot as plt
lr = 0.0002nz = 100 # noise dimensionimage_size = 64nc = 3 # chanel of img ngf = 64 # generate channelndf = 64 # discriminative channelbeta1 = 0.5BatchSize = 32max_epoch = 2 # 
transform=transforms.Compose([                transforms.Resize(64) ,                transforms.ToTensor(),                transforms.Normalize([0.5]*3,[0.5]*3)                ])
dataset=CIFAR10(root='cifar10/',transform=transform,download=True)
dataloader=torch.utils.data.DataLoader(dataset,BatchSize,shuffle = True)

def weights_init(m):    classname=m.__class__.__name__    if classname.find('Conv')!=-1:        m.weight.data.normal_(0.0,0.02)    elif classname.find('BatchNorm')!=-1:        m.weight.data.normal_(1.0,0.02)        m.bias.data.fill_(0)        # define modelclass Generator(nn.Module):    def __init__(self):        super(Generator,self).__init__()        self.main = nn.Sequential(            nn.ConvTranspose2d(nz,ngf*8,4,1,0,bias=False),            nn.BatchNorm2d(ngf*8),            nn.ReLU(True),
            nn.ConvTranspose2d(ngf*8,ngf*4,4,2,1,bias=False),            nn.BatchNorm2d(ngf*4),            nn.ReLU(True),
            nn.ConvTranspose2d(ngf*4,ngf*2,4,2,1,bias=False),            nn.BatchNorm2d(ngf*2),            nn.ReLU(True),
            nn.ConvTranspose2d(ngf*2,ngf,4,2,1,bias=False),            nn.BatchNorm2d(ngf),            nn.ReLU(True),
            nn.ConvTranspose2d(ngf,nc,4,2,1,bias=False),            nn.Tanh()        )    def forward(self,input):        output=self.main(input)        return outputnetG=Generator()netG.apply(weights_init)

        class Discriminator(nn.Module):    def __init__(self):        super(Discriminator,self).__init__()        self.main = nn.Sequential(            nn.Conv2d(nc,ndf,4,2,1,bias=False),            nn.LeakyReLU(0.2,inplace=True),
            nn.Conv2d(ndf,ndf*2,4,2,1,bias=False),            nn.BatchNorm2d(ndf*2),            nn.LeakyReLU(0.2,inplace=True),
            nn.Conv2d(ndf*2,ndf*4,4,2,1,bias=False),            nn.BatchNorm2d(ndf*4),            nn.LeakyReLU(0.2,inplace=True),
            nn.Conv2d(ndf*4,ndf*8,4,2,1,bias=False),            nn.BatchNorm2d(ndf*8),            nn.LeakyReLU(0.2,inplace=True),
            nn.Conv2d(ndf*8,1,4,1,0,bias=False),            nn.Sigmoid()        )    def forward(self,input):        output=self.main(input)        return output.view(-1,1).squeeze(1)    netD=Discriminator()netD.apply(weights_init)

# optimizeroptimizerD = optim.Adam(netD.parameters(),lr,betas=(beta1,0.999))optimizerG = optim.Adam(netG.parameters(),lr,betas=(beta1,0.999))
# criterioncriterion = nn.BCELoss()


fix_noise = torch.randn(BatchSize,nz,1,1).normal_(0,1)
    if torch.cuda.is_available():    fix_noise = fix_noise.cuda()    netG.cuda()    netD.cuda()    criterion.cuda()             print('begin training, be patient')
for epoch in range(max_epoch):    for ii, data in enumerate(dataloader,0):        real,_=data        batch_size=real.size(0)        input=real        label = torch.ones(batch_size) # 1 for real        label2 = torch.zeros(batch_size)        noise = torch.randn(batch_size,nz,1,1).normal_(0,1)                if torch.cuda.is_available:            input = input.cuda()            label = label.cuda()            label2 = label.cuda()            noise = noise.cuda()                 # ----- train netd -----        netD.zero_grad()                ## train netd with real img        output=netD(input)        errorD_real=criterion(output,label)        errorD_real.backward()        D_x=output.data.mean()                ## train netd with fake img        fake_pic=netG(noise)        output2=netD(fake_pic.detach())                errorD_fake=criterion(output2,label2)        errorD_fake.backward()                D_x2=output2.data.mean()        error_D=errorD_real+errorD_fake                optimizerD.step()                # ------ train netg -------        netG.zero_grad()        fake_pic=netG(noise)        output=netD(fake_pic)        error_G=criterion(output,label)        error_G.backward()        D_G_z2=output.data.mean()        optimizerG.step()
#生成图片fake_u=netG(fix_noise)imgs = torchvision.utils.make_grid(fake_u*0.5+0.5).cpu()plt.imshow(imgs.permute(1,2,0).numpy()) plt.show()

GAN在多个应用领域都取得了许多令人振奋的结果,比如,利用CycleGAN进行图像转换,利用StackGAN自动从文本中制作逼真的图像,利用SRGAN通过预训练模型提高图像品质...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299605.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化学习的数学原理学习笔记 - RL基础知识

文章目录 Roadmap🟡基础概念贝尔曼方程(Bellman Equation)基本形式矩阵-向量形式迭代求解状态值 vs. 动作值 🟡贝尔曼最优方程(Bellman Optimality Equation,BOE)基本形式迭代求解 参考资料&…

服务器不稳定是什么意思?有哪些表现

在当今的信息化时代,服务器已经成为企业和组织不可或缺的基础设施。然而,由于各种原因,服务器可能会出现不稳定的情况,给企业和组织带来不必要的损失和风险。那么,什么是服务器不稳定,它又有哪些表现呢&…

35岁的程序员,见到领导就躲,害怕跟领导沟通,你被说中了吗?

35岁的程序员,见到领导就躲,害怕跟领导沟通,你被说中了吗? 35岁的小王是一名项目经验丰富、解决问题能力强的资深程序员,然而却唯独有一个软肋:害怕碰见领导,害怕跟领导沟通。 我们不经要问&a…

西电期末1028.信号解调

一.题目 二.分析与思路 题越来越水了 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int n;int a,b;//坐标for(int i0;i<n;i){scanf("%d%d",&a,&b);if((a-4)*(a-4)(b-4)*(b-4)>(a4)*(a4)(b4)*(b4))printf("2 ");else pri…

STM32 基础知识(探索者开发板)--135讲 ADC转换

ADC定义&#xff1a; ADC即模拟数字转换器&#xff0c;英文详称 Analog-to-digital converter&#xff0c;可以将外部的模拟信号转换 ADC数模转换中一些常用函数&#xff1a; 1. HAL_ADC_Init 函数 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc); 初始化ADC 形参&…

Redis 持久化——AOF

文章目录 为什么需要AOF?概念持久化查询和设置1. 查询AOF启动状态2. 开启AOF持久化2.1 命令行启动AOF2.2 配置文件启动 AOF 3. 触发持久化3.1 自动触发3.3 手动触发 4. AOF 文件重写4.1 什么是AOF重写&#xff1f;4.2 AOF 重写实现4.3 AOF 重写流程 5. 配置说明6. 数据恢复6.1…

dp--118.杨辉三角/easy 理解度A

118.杨辉三角 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[…

Spring+Vue实战项目环境准备跑通程序

SpringVue 源项目 后端&#xff1a; 首先在GitHub上克隆项目到本地&#xff08;zip包下载/sourcetree拉取/gitbash克隆&#xff09;。 https://github.com/songboriceman/doubao_community_backend 然后下载Lombok安装到你的IDE&#xff08;eclipse&#xff09;。 https://p…

如何将手机中termux用电脑的vnc显示

在电脑中我们同样需要下载 vnc 这里填写手机上的 IP&#xff1a;端口号 我的是 10.11.166.219:5902 下面填名字然后 手机端 输入sshd开始ssh这边就可以连接啦

跨平台开发教学:构建同时支持iOS和Android的教育网校APP

当下&#xff0c;教育行业也逐渐迎来了数字化转型的时代。构建一款支持iOS和Android的教育网校APP&#xff0c;不仅可以提供更好的用户体验&#xff0c;还能扩大应用的覆盖面&#xff0c;满足不同用户群体的需求。 一、选择合适的跨平台开发框架 在开始构建教育网校APP之前&a…

14_IO_其他流

文章目录 数据流DataOutputStream数据输出流DataInputStream数据输入流 打印流PrintStream字节打印流PrintWriter字符打印流 标准输入输出流标准输入流标准输出流 对象流(序列化与反序列化流)ObjectOutputStream序列化流ObjectInputStream反序列化流 RandomAccessFile随机访问文…

八大算法排序@快速排序、递归版本一(C语言版本)

目录 快速排序版本一概念算法思想一二三 快排步骤代码实现时间复杂度空间复杂度特性总结 快速排序版本一 概念 快速排序&#xff08;Quicksort&#xff09;是一种高效的排序算法&#xff0c;它是由英国计算机科学家 Tony Hoare 在1960年提出的。快速排序是基于分治&#xff08…

STM32深入系列02——BootLoader分析与实现

文章目录 1. STM32程序升级方法1.1 ST-Link / J-link下载1.2 ISP&#xff08;In System Programing&#xff09;1.3 IAP&#xff08;In Applicating Programing&#xff09;1.3.1 正常程序运行流程1.3.2 有IAP时程序运行流程 2. STM32 Bootloader实现2.1 方式一&#xff1a;Boo…

西电期末1026.删除特定字符后排序输出

一.题目 二.分析与思路 题目名字很有意思&#xff0c;先删除后排序&#xff0c;难死了&#xff0c;还是先排序后删除简单吧&#xff1f;注意字符串里有空格&#xff0c;前面提到过了&#xff1a;只能用fgets!! 三.代码实现 #include<bits/stdc.h>//万能头 #define MAX…

SpringBoot-项目引入Redis依赖

在使用Spring Boot开发应用时&#xff0c;可以使用Redis来实现缓存、分布式锁等功能。在编写业务逻辑代码时&#xff0c;可以通过注入RedisTemplate或StringRedisTemplate对象来操作Redis&#xff0c;如存取数据、设置过期时间、删除数据等。同时&#xff0c;还可以使用Redis的…

西电期末1027.判断同构数

一.题目 二.分析与思路 不用把他转成字符串再转成数字之类的&#xff0c;用数学解决就好&#xff01;找出一个数的最后位就是将其对求余啊&#xff0c;找一个数有几位以前也有过啊&#xff0c;那不就过了嘛&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 in…

Windows.OpenSSL生成ssl证书配置到nginx

一、下载OpenSSL程序安装 到E:\soft\OpenSSL-Win64 二、打开一个CMD控制台窗口&#xff0c;设置好openssl.cnf路径 E: cd E:\soft\OpenSSL-Win64\bin set OPENSSL_CONFE:\soft\OpenSSL-Win64\bin\openssl.cnf 三、在当前目录 E:\soft\OpenSSL-Win64\bin 里创建两个子目录 m…

MySQL 8.0 InnoDB Tablespaces之Temporary Tablespaces(临时表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之Temporary Tablespaces&#xff08;临时表空间&#xff09;会话临时表空间会话临时表空间的磁盘分配和回收会话临时表空间的创建创建临时表和查看临时表信息会话临时表空间相关的设置参数innodb_temp_tablespaces_dir 全局临时表空间查…

CentOS安装gcc及g++

目录 一、在线安装 二、离线安装 1、收集对应.rpm文件 2、rpm文件上传 3、在该目录下执行安装命令 3、测试 一、在线安装 联网安装比较简单只需使用如下命令即可 yum install gcc yum install gcc-c 二、离线安装 1、收集对应.rpm文件 &#xff08;1&#xff09;、解压…