深度学习与大模型 习题及答案 第6章-生成对抗网络与深度生成模型-课后习题_第1页
深度学习与大模型 习题及答案 第6章-生成对抗网络与深度生成模型-课后习题_第2页
深度学习与大模型 习题及答案 第6章-生成对抗网络与深度生成模型-课后习题_第3页
深度学习与大模型 习题及答案 第6章-生成对抗网络与深度生成模型-课后习题_第4页
深度学习与大模型 习题及答案 第6章-生成对抗网络与深度生成模型-课后习题_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章生成对抗网络与深度生成模型一、问答题

1.简述对抗生成网络的概念和作用。答:对抗生成网络的概念:GAN是一种深度学习模型,由生成器和判别器两个网络通过对抗博弈训练。生成器生成模拟真实数据的样本,判别器区分样本是真实数据还是生成器伪造的,二者相互迭代优化,最终达到纳什均衡。​对抗生成网络的作用:核心是生成逼真的合成数据,同时能学习数据的潜在分布,为无监督/半监督学习提供强大工具。列举并简述对抗生成网络的主要变体。下面列举对抗生成网络的主要变体

-DCGAN(深度卷积GAN):用卷积层替代全连接层,生成器和判别器均采用转置卷积/卷积结构,大幅提升图像生成质量,是图像GAN的基础框架。-CGAN(条件GAN):在生成器和判别器中加入条件信息(如标签、属性),可定向生成特定类别的数据(如生成指定数字的手写体)。-CycleGAN(循环GAN):用于跨域图像转换,无需成对数据,通过“循环一致性损失”实现双向转换(如马→斑马、照片→油画)。-WGAN(WassersteinGAN):改进损失函数,用Wasserstein距离替代JS散度,解决GAN训练不稳定、模式崩溃问题,提升生成多样性。-StyleGAN:引入风格迁移思想,可精细控制生成图像的风格(如人脸的发型、表情),生成超高分辨率、细节丰富的图像。列举深度生成模型的应用场景。下面列举深度生成模型的主要应用场景-图像领域:图像生成(如人脸、风景)、图像修复(补全老照片破损部分)、图像编辑(换脸、风格转换)、超分辨率重建。-自然语言处理:文本生成(诗歌、小说、新闻)、对话系统(生成自然回复)、文本摘要与翻译。-语音领域:语音合成(TTS)、语音转换(变声、跨语言语音转换)、语音修复(去噪、补全)。-跨模态生成:文本生成图像(如DALL·E)、图像生成文本(图像描述)、语音生成文本(ASR)。-其他场景:数据增强(生成标注样本提升模型泛化能力)、异常检测(通过学习正常数据分布识别异常)、药物分子生成(设计新型药物分子结构)。二、实践题

构建基于PyTorch框架和FashionMNIST数据来源实现DCGAN生成手写数字图像。要求:基于PyTorch深度学习框架,选择GPU运行环境运行。答:以下是完整的DCGAN实现代码,包含数据加载、网络构建、训练流程及图像生成,适配GPU运行环境。importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorch.utils.dataimportDataLoaderfromtorchvisionimportdatasets,transformsfromtorchvision.utilsimportsave_imageimportmatplotlib.pyplotaspltimportnumpyasnp#--------------------------1.环境配置与参数设置--------------------------#设备配置(自动检测GPU)device=torch.device("cuda:0"iftorch.cuda.is_available()else"cpu")print(f"使用设备:{device}")#超参数设置latent_dim=100#噪声向量维度img_channels=1#图像通道数(FashionMNIST为灰度图)img_size=28#图像尺寸(28x28)batch_size=128epochs=50lr=0.0002beta1=0.5#Adam优化器动量参数#--------------------------2.数据加载(FashionMNIST)--------------------------#图像预处理:归一化到[-1,1](DCGAN常用)transform=transforms.Compose([transforms.Resize(img_size),transforms.ToTensor(),transforms.Normalize([0.5],[0.5])#灰度图单通道归一化])#加载FashionMNIST数据集dataset=datasets.FashionMNIST(root='./data',train=True,download=True,transform=transform)dataloader=DataLoader(dataset,batch_size=batch_size,shuffle=True,num_workers=2)#--------------------------3.生成器(Generator)构建--------------------------classGenerator(nn.Module):def__init__(self):super(Generator,self).__init__()self.model=nn.Sequential(#输入:(batch_size,latent_dim,1,1)nn.ConvTranspose2d(latent_dim,512,4,1,0,bias=False),nn.BatchNorm2d(512),nn.ReLU(True),#输出:(batch_size,512,4,4)nn.ConvTranspose2d(512,256,4,2,1,bias=False),nn.BatchNorm2d(256),nn.ReLU(True),#输出:(batch_size,256,8,8)nn.ConvTranspose2d(256,128,4,2,1,bias=False),nn.BatchNorm2d(128),nn.ReLU(True),#输出:(batch_size,128,16,16)nn.ConvTranspose2d(128,64,4,2,1,bias=False),nn.BatchNorm2d(64),nn.ReLU(True),#输出:(batch_size,64,32,32)nn.ConvTranspose2d(64,img_channels,4,2,15,bias=False),#调整padding适配28x28nn.Tanh()#输出归一化到[-1,1]#最终输出:(batch_size,1,28,28))defforward(self,x):returnself.model(x)#--------------------------4.判别器(Discriminator)构建--------------------------classDiscriminator(nn.Module):def__init__(self):super(Discriminator,self).__init__()self.model=nn.Sequential(#输入:(batch_size,1,28,28)nn.Conv2d(img_channels,64,4,2,1,bias=False),nn.LeakyReLU(0.2,inplace=True),#输出:(batch_size,64,14,14)nn.Conv2d(64,128,4,2,1,bias=False),nn.BatchNorm2d(128),nn.LeakyReLU(0.2,inplace=True),#输出:(batch_size,128,7,7)nn.Conv2d(128,256,4,2,1,bias=False),nn.BatchNorm2d(256),nn.LeakyReLU(0.2,inplace=True),#输出:(batch_size,256,3,3)nn.Conv2d(256,512,4,2,1,bias=False),nn.BatchNorm2d(512),nn.LeakyReLU(0.2,inplace=True),#输出:(batch_size,512,1,1)nn.Conv2d(512,1,3,1,0,bias=False),nn.Sigmoid()#输出概率(0-1))defforward(self,x):returnself.model(x).view(-1,1)#展平为(batch_size,1)#--------------------------5.模型初始化与配置--------------------------#初始化生成器和判别器并移至GPUgenerator=Generator().to(device)discriminator=Discriminator().to(device)#损失函数(二分类交叉熵)criterion=nn.BCELoss()#优化器(Adam)optimizer_G=optim.Adam(generator.parameters(),lr=lr,betas=(beta1,0.999))optimizer_D=optim.Adam(discriminator.parameters(),lr=lr,betas=(beta1,0.999))#固定噪声(用于训练过程中可视化生成效果)fixed_noise=torch.randn(16,latent_dim,1,1).to(device)#--------------------------6.训练流程--------------------------print("开始训练...")forepochinrange(epochs):fori,(real_imgs,_)inenumerate(dataloader):batch_size=real_imgs.size(0)real_imgs=real_imgs.to(device)#--------------------------训练判别器--------------------------#标签:真实图像为1,生成图像为0real_labels=torch.ones(batch_size,1).to(device)fake_labels=torch.zeros(batch_size,1).to(device)#1.判别真实图像output=discriminator(real_imgs)d_loss_real=criterion(output,real_labels)#2.判别生成图像noise=torch.randn(batch_size,latent_dim,1,1).to(device)fake_imgs=generator(noise)output=discriminator(fake_imgs.detach())#冻结生成器d_loss_fake=criterion(output,fake_labels)#3.判别器总损失与优化d_loss=d_loss_real+d_loss_fakeoptimizer_D.zero_grad()d_loss.backward()optimizer_D.step()#--------------------------训练生成器--------------------------#生成器希望判别器将生成图像判为1output=discriminator(fake_imgs)g_loss=criterion(output,real_labels)#生成器损失与优化optimizer_G.zero_grad()g_loss.backward()optimizer_G.step()#--------------------------打印日志--------------------------if(i+1)%100==0:print(f"Epoch[{epoch+1}/{epochs}],Step[{i+1}/{len(dataloader)}],"f"D_Loss:{d_loss.item():.4f},G_Loss:{g_loss.item():.4f}")#--------------------------保存生成图像--------------------------generator.eval()#评估模式withtorch.no_grad():fake_imgs=generator(fixed_noise)#反归一化(从[-1,1]到[0,1])fake_imgs=fake_imgs/2+0.5save_image(fake_imgs,f'generated_imgs/epoch_{epoch+1}.png',nrow=4)generator.train()#恢复训练模式#--------------------------7.模型保存--------------------------torch.save(generator.state_dict(),'generator.pth')torch.save(discriminator.state_dict(),'discriminator

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论