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

绍兴网站建设08keji网站左侧图片悬浮代码

绍兴网站建设08keji,网站左侧图片悬浮代码,杭州手机软件开发公司,店面建设网站的必要性目录 一、引言 二、生成对抗网络原理 #xff08;一#xff09;基本架构 #xff08;二#xff09;训练过程 三、生成对抗网络的应用 #xff08;一#xff09;图像生成 无条件图像生成#xff1a; #xff08;二#xff09;数据增强 #xff08;三#xff… 目录 一、引言 二、生成对抗网络原理 一基本架构 二训练过程 三、生成对抗网络的应用 一图像生成 无条件图像生成 二数据增强 三风格迁移 四、生成对抗网络训练中的挑战与解决策略 一模式崩溃 二梯度消失 一、引言 生成对抗网络GAN自 2014 年被 Goodfellow 等人提出以来在深度学习领域引起了广泛的关注和研究热潮。它创新性地引入了一种对抗训练的思想通过生成器和判别器的相互博弈使得生成器能够学习到数据的潜在分布从而生成逼真的样本数据。这种独特的机制使得 GAN 在图像生成、文本生成、音频生成等多个领域展现出了巨大的潜力为人工智能技术的发展带来了新的突破和方向。 二、生成对抗网络原理 一基本架构 GAN 主要由两个核心组件构成生成器Generator和判别器Discriminator。 生成器 生成器的任务是接收一个随机噪声向量 通常从一个简单的分布如标准正态分布 N(0,1)采样得到并通过一系列的神经网络层将其映射为与真实数据相似的生成数据G(z)例如在图像生成任务中生成器的输出将是一张与训练数据集中图像具有相似特征的合成图像。生成器通常采用多层的反卷积神经网络Deconvolutional Neural Network或转置卷积神经网络Transposed Convolutional Neural Network结构。以生成64*64其网络结构如下 import torch import torch.nn as nnclass Generator(nn.Module):def __init__(self):super(Generator, self).__init__()# 输入为 100 维的噪声向量self.fc nn.Linear(100, 4 * 4 * 1024)self.deconv1 nn.ConvTranspose2d(1024, 512, kernel_size4, stride2, padding1)self.bn1 nn.BatchNorm2d(512)self.deconv2 nn.ConvTranspose2d(512, 256, kernel_size4, stride2, padding1)self.bn2 nn.BatchNorm2d(256)self.deconv3 nn.ConvTranspose2d(256, 128, kernel_size4, stride2, padding1)self.bn3 nn.BatchNorm2d(128)self.deconv4 nn.ConvTranspose2d(128, 3, kernel_size4, stride2, padding1)def forward(self, x):x self.fc(x)x x.view(-1, 1024, 4, 4)x torch.relu(self.bn1(self.deconv1(x)))x torch.relu(self.bn2(self.deconv2(x)))x torch.relu(self.bn3(self.deconv3(x)))x torch.tanh(self.deconv4(x))return x 判别器 判别器的作用是区分输入的数据是来自真实数据分布还是由生成器生成的数据。它接收真实数据 x 或生成数据 G(z)并输出一个表示数据真实性的概率值  D(x)或D(G(z)) 取值范围在 0 到  1之间接近  表示数据更可能是真实的接近  表示数据更可能是生成的。 判别器通常采用卷积神经网络Convolutional Neural Network结构。例如对于判断  彩色图像的判别器网络结构如下 class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.conv1 nn.Conv2d(3, 128, kernel_size4, stride2, padding1)self.bn1 nn.BatchNorm2d(128)self.conv2 nn.Conv2d(128, 256, kernel_size4, stride2, padding1)self.bn2 nn.BatchNorm2d(256)self.conv3 nn.Conv2d(256, 512, kernel_size4, stride2, padding1)self.bn3 nn.BatchNorm2d(512)self.conv4 nn.Conv2d(512, 1, kernel_size4, stride2, padding0)def forward(self, x):x torch.relu(self.bn1(self.conv1(x)))x torch.relu(self.bn2(self.conv2(x)))x torch.relu(self.bn3(self.conv3(x)))x torch.sigmoid(self.conv4(x))return x.view(-1) 二训练过程 GAN 的训练过程是一个对抗性的迭代过程。 三、生成对抗网络的应用 一图像生成 1.无条件图像生成 GAN 可以用于生成各种类型的图像如人脸图像、风景图像等。例如在人脸图像生成任务中通过在大规模人脸数据集上训练 GAN生成器能够学习到人脸的各种特征如五官的形状、肤色、表情等从而生成全新的、逼真的人脸图像。 代码示例 # 假设已经定义好生成器 G 和判别器 D以及相关的优化器和损失函数 # 训练循环 num_epochs 100 for epoch in range(num_epochs):for i, (real_images, _) in enumerate(dataloader):# 训练判别器# 采样噪声z torch.randn(real_images.shape[0], 100).to(device)# 生成假图像fake_images G(z)# 计算判别器损失real_loss criterion(D(real_images), torch.ones(real_images.shape[0]).to(device))fake_loss criterion(D(fake_images.detach()), torch.zeros(fake_images.shape[0]).to(device))d_loss (real_loss fake_loss) / 2# 更新判别器参数d_optimizer.zero_grad()d_loss.backward()d_optimizer.step()# 训练生成器# 再次采样噪声z torch.randn(real_images.shape[0], 100).to(device)# 生成假图像fake_images G(z)# 计算生成器损失g_loss criterion(D(fake_images), torch.ones(fake_images.shape[0]).to(device))# 更新生成器参数g_optimizer.zero_grad()g_loss.backward()g_optimizer.step() 2.条件图像生成 可以通过在生成器和判别器的输入中加入条件信息实现条件图像生成。例如根据给定的文本描述生成相应的图像或者根据特定的类别标签生成属于该类别的图像。 以根据类别标签生成图像为例在生成器的输入中除了噪声向量 还加入类别标签的编码向量 生成器的网络结构需要进行相应修改如 class ConditionalGenerator(nn.Module):def __init__(self, num_classes):super(ConditionalGenerator, self).__init__()# 输入为 100 维噪声向量和类别编码向量self.fc nn.Linear(100 num_classes, 4 * 4 * 1024)# 后续的反卷积层与无条件生成器类似self.deconv1 nn.ConvTranspose2d(1024, 512, kernel_size4, stride2, padding1)self.bn1 nn.BatchNorm2d(512)#...def forward(self, x, y):# 拼接噪声向量和类别编码向量x torch.cat([x, y], dim1)x self.fc(x)x x.view(-1, 1024, 4, 4)x torch.relu(self.bn1(self.deconv1(x)))#...return x 二数据增强 图像数据增强 在图像分类、目标检测等任务中数据量不足可能导致模型过拟合。GAN 可以用于生成额外的图像数据来扩充数据集。通过在原始图像数据集上训练 GAN生成与原始图像相似但又有一定变化的图像如不同角度、光照条件下的图像从而增加数据的多样性提高模型的泛化能力。其他数据类型的数据增强 除了图像数据GAN 也可以应用于其他数据类型的数据增强如文本数据。例如通过生成与原始文本相似的新文本扩充文本数据集有助于训练更强大的文本处理模型如文本分类、机器翻译等模型。 三风格迁移 图像风格迁移原理 GAN 可以实现图像风格迁移即将一幅图像的内容与另一幅图像的风格进行融合。其原理是通过定义内容损失和风格损失利用生成器生成具有目标风格的图像同时判别器用于判断生成图像的质量和风格一致性。例如使用预训练的 VGG 网络来计算内容损失和风格损失。内容损失衡量生成图像与原始内容图像在特征表示上的差异风格损失衡量生成图像与目标风格图像在风格特征如纹理、颜色分布等上的差异。 代码示例实现风格迁移 import torchvision.models as models import torch.nn.functional as F# 加载预训练的 VGG 网络 vgg models.vgg19(pretrainedTrue).features.eval().to(device)# 定义内容损失函数 def content_loss(content_features, generated_features):return F.mse_loss(content_features, generated_features)# 定义风格损失函数 def style_loss(style_features, generated_features):style_loss 0for s_feat, g_feat in zip(style_features, generated_features):# 计算 Gram 矩阵s_gram gram_matrix(s_feat)g_gram gram_matrix(g_feat)style_loss F.mse_loss(s_gram, g_gram)return style_loss# Gram 矩阵计算函数 def gram_matrix(x):b, c, h, w x.size()features x.view(b * c, h * w)gram torch.mm(features, features.t())return gram.div(b * c * h * w) 四、生成对抗网络训练中的挑战与解决策略 一模式崩溃 问题描述 模式崩溃是 GAN 训练中常见的问题之一表现为生成器生成的样本多样性不足往往集中在少数几种模式上。例如在生成人脸图像时可能生成的人脸都具有相似的特征而不能涵盖人脸的多种可能形态。 解决策略 Wasserstein GANWGANWGAN 对 GAN 的损失函数进行了改进采用 Wasserstein 距离来衡量真实数据分布和生成数据分布之间的差异而不是传统的 JS 散度。这使得训练过程更加稳定减少了模式崩溃的发生。其关键代码修改如下 # 判别器的最后一层不再使用 Sigmoid 激活函数 self.conv4 nn.Conv2d(512, 1, kernel_size4, stride2, padding0) # 定义 WGAN 的损失函数 def wgan_loss(real_pred, fake_pred):return -torch.mean(real_pred) torch.mean(fake_pred) 模式正则化通过在生成器的损失函数中加入正则化项鼓励生成器生成更多样化的样本。例如在生成器的损失函数中加入对生成样本的熵约束使得生成样本的分布更加均匀。 二梯度消失 问题描述 在 GAN 训练初期当判别器的性能非常好时生成器的梯度可能会变得非常小导致生成器难以更新参数无法有效地学习到数据的分布。这是因为判别器能够很容易地区分真实数据和生成数据使得生成器的损失函数接近饱和梯度趋近于 。解决策略 梯度惩罚Gradient Penalty在判别器的损失函数中加入梯度惩罚项限制判别器的梯度大小使得判别器不会过于强大从而缓解生成器的梯度消失问题。例如在 WGAN-GPWasserstein GAN with Gradient Penalty中梯度惩罚项的计算如下 def gradient_penalty(critic, real, fake, device):BATCH_SIZE, C, H, W real.shape# 随机采样插值系数alpha torch.rand((BATCH_SIZE, 1, 1, 1)).repeat(1, C, H, W).to(device)# 计算插值数据interpolated_images real * alpha fake * (1 - alpha)# 计算判别器对插值数据的输出mixed_scores critic(interpolated_images)# 计算梯度gradient torch.autograd.grad(inputsinterpolated_images,outputsmixed_scores,grad_outputstorch.ones_like(mixed_scores),create_graphTrue,retain_graphTrue,)[0]# 计算梯度惩罚项gradient gradient.view(gradient.shape[0], -1)gradient_norm gradient.norm(2, dim1)gradient_penalty torch.mean((gradient_norm - 1) ** 2)return gradient_penalty 使用 Leaky ReLU 激活函数在判别器和生成器的网络中使用 Leaky ReLU 激活函数替代传统的 ReLU 激活函数。Leaky ReLU 允许在负半轴有一个较小的斜率从而避免了在某些情况下神经元完全不激活导致的梯度消失问题。
http://www.dnsts.com.cn/news/244959.html

相关文章:

  • 网站开发网上宠物店管理系统做网站优化有前景吗
  • 陕西省住房和城乡建设厅网站上怎么打印证书手机网站开发外文文献
  • 陇西网站建设 室内设计乐清公司网站建设
  • 公司设立网址东营企业网站排名优化
  • WordPress怎么文章连号深圳seo优化seo关键词
  • 网站开发用什么架构湖南长大建设集团股份有限公司网站
  • html5 门户网站模版工装定制
  • 建湖做网站的公司建立网站站点的过程中正确的是
  • 微信开发工具的公司seo优化厂商
  • 哪儿提供邯郸做网站网站设计公司销售渠道建设
  • 建站流程wordpress文章付费支付宝
  • 上海网站建设的价格是多少钱杨庄网站建设
  • 做贷款网站网站搭建平台
  • 企业自建网站劣势石河子做网站公司
  • 社交网站建设平台品牌商城网站开发
  • 资料库网站应该怎么做桂林建设网站
  • 南京网站设计与制作下载安装百度地图导航
  • 张家港网站制作企优做标书有哪些网站能接到
  • 网站域名备案需要多长时间建筑网站首页设计
  • 兰州新区建设厅网站网站中做背景图片位置咋写
  • 成都有哪些做网站的网站开发总监
  • 宁波网站推广优化联系电话怎样进行网络推广效果更好
  • 泸州市规划建设局网站网站 谁建设谁负责
  • 盐城专业做网站seo优化工作怎么样
  • 网站用Access做数据库互联网下的网络营销
  • 台州企业网站排名优化儿童手工制作大全
  • 汉中专业网站建设开发一个简单的小程序需要多少钱
  • 怎么样建网站网站建站网站626969
  • 企业建立企业网站有哪些优势?盛大印刷公司网页设计
  • 秦皇岛建设局网站6广西网络优化seo