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

帝国建站系统网站空间过期

帝国建站系统,网站空间过期,wordpress导航站源码,wordpress改不成中文[GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片 文章目录 [GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片1. 写在前面#xff1a;1.1 应用场景#xff1a;1.2 数据集情况#xff1a;1.3 实验原理讲解和分析#xff08;简化版#x…[GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片 文章目录 [GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片1. 写在前面1.1 应用场景1.2 数据集情况1.3 实验原理讲解和分析简化版到时候可以出一期深入的PaperReading1.4 一些必要的介绍 2. 重要实验代码2.1 一些相关的数据预处理2.2 生成器和判别器2.3 损失函数计算2.4 训练和反向传播 3. 实验结果分析3.0 baseline3.0.1 损失函数3.0.2 last picture3.0.3 gif picture 3.1 epoch不变的情况下提高学习率3.1.1 损失函数3.1.2 last picture3.1.3 gif picture 3.2 试试增加epoch3.2.1 损失函数3.2.2 last picture3.2.3 gif picture 4. 目前比较不错的效果展示5. 一些其它问题和小小的总结参考资料 1. 写在前面 1.1 应用场景 为了支撑人工智能落地为人们的生活带来更多的便利充足的数据尤为重要。而在实际的应用中常常会面临专业数据匮乏数据不均衡的问题所以利用神经网络根据已有的数据生成新的数据进行数据扩充成为了助力人工智能落地的新思路。 1.2 数据集情况 我所使用的数据集是总量为256张的彩色的向日葵的图片。 1.3 实验原理讲解和分析简化版到时候可以出一期深入的PaperReading GAN网络俗称生成式对抗网络该网络训练了两个模型(即生成器G和判别器D)来进行相互博弈而博弈的目的是为了得到一个性能较好的可以用于生成我们想要的图片的生成器G。其中生成器网络G是为了生成可以用来迷惑判别器网络D的假图像。按数学语言来理解就是要最大化判别器D犯错的概率。而判别器网络D则是为了判别一个样本是不是来自于真实数据。按数学语言来理解就是它用于估计出一个样本是来源于真实的数据而非来自于G的概率。因此不难得出这个模型的训练的过程大抵就是一个生成器G和判别器D之间的左右互博的过程。不过值得注意的是这里对G和D的模型的构建使用的是多层感知机MLP(Multilayer perceptrons),也就是在网络上主要是使用全连接层。 从这里我们可以看到GAN网络的损失函数为 这个估值函数中由两个部分的数学期望所组成第一部分是当输入是来自真实样本数据的期望而第二部分则是当输入是来自生成器生成的样本时的期望。判别器输出的值是一个概率值这个概率表示输出值是来自真实数据而非来自生成器的程度。这个值越接近1就越表明当前的输入来自真实数据而越接近0就表示这个输入来自生成器。这样们就可以理解D(x)的目的是为了更好地区分二者这样能是的D函数输出的值是合理的更接近1或0。而G的目的是为了让G(z)更像数据样本这样可以使得第二个期望中的D(G(z))能被误判为1这样就可以达到让第二个期望的值尽可能小的效果。再反过来看D的训练D能更好判别真假就更加使得第二个期望中的D(G(z))能被正确判为0这样就可以达到让第二个期望的值尽可能大的效果。所以综合地来看判别器D就是为了让整个损失价值函数尽量大而生成器则反之它想让损失函数足够小。这样也就符合我们训练一个网络的指标是让损失值减小而我们也就可以沿着想办法让损失减小的方向去优化我们的模型从而达到训练出一个较好的生成器。 1.4 一些必要的介绍 在我个人的实践中我所使用的深度学习框架为华为昇腾AI系列的mindspore-1.9深度学习框架。所使用的笔记本的操作系统为Windows10我使用的是AMD的CPU来进行训练因为本身该demo的数据量并不是很大。 2. 重要实验代码 2.1 一些相关的数据预处理 import numpy as np import matplotlib.pyplot as plt from PIL import Image # 一个读取图片和对图片做基础操作的类 # 数据转换 image_size 64 input_images np.asarray([np.asarray # 将Python的数组转化成npArray(Image.open(input_data_dir / file).resize((image_size, image_size)) # 将图片的尺寸转化为 64* 64.convert(L)) # 将图片转化为灰度图这样就简化了运算只需要考虑一个颜色通道了。可拓展点对RGB三个颜色的通道都进行处理。for file in filename])# 数据预处理 input_images input_images.reshape(256, 4096) # 将256张图片展平为一维向量 # input_images input_images.astype(float32)/255 # 把图片的值放缩到01之间 input_images (input_images.astype(float32) - 127.5) / 127.5 # 把图片的值放缩到-11之间 # input_images (input_images.astype(float32)-mean)/std # 把数据样本转化为均值为0方差为1的标准化数据未完成2.2 生成器和判别器 # 构建生成器 img_size 64 # 训练图像长宽class Generator(nn.Cell):def __init__(self, latent_size, auto_prefixTrue):super(Generator, self).__init__(auto_prefixauto_prefix)self.model nn.SequentialCell()# [N, 100] - [N, 128]# 输入一个100维的01之间的高斯分布然后通过第一层线性变换将其映射到256维self.model.append(nn.Dense(latent_size, 128))self.model.append(nn.ReLU())# [N, 128] - [N, 256]self.model.append(nn.Dense(128, 256))self.model.append(nn.BatchNorm1d(256))self.model.append(nn.ReLU())# [N, 256] - [N, 512]self.model.append(nn.Dense(256, 512))self.model.append(nn.BatchNorm1d(512))self.model.append(nn.ReLU())# [N, 512] - [N, 1024]self.model.append(nn.Dense(512, 1024))self.model.append(nn.BatchNorm1d(1024))self.model.append(nn.ReLU())# [N, 1024] - [N, 4096]# 经过线性变换将其变成4096维self.model.append(nn.Dense(1024, img_size * img_size))# 经过Tanh激活函数是希望生成的假的图片数据分布能够在-11之间self.model.append(nn.Tanh())def construct(self, x):img self.model(x)return ops.reshape(img, (-1, 1, 64, 64))latent_size 100 # 隐码的长度 net_g Generator(latent_size) net_g.update_parameters_name(generator)# 构建判别器class Discriminator(nn.Cell):def __init__(self, auto_prefixTrue):super().__init__(auto_prefixauto_prefix)self.model nn.SequentialCell()# [N, 4096] - [N, 1024]self.model.append(nn.Dense(img_size * img_size, 1024)) # 输入特征数为4096输出为1024self.model.append(nn.LeakyReLU()) # 默认斜率为0.2的非线性映射激活函数# [N, 1024] - [N, 256]self.model.append(nn.Dense(1024, 256)) # 进行一个线性映射self.model.append(nn.LeakyReLU())# [N, 256] - [N, 1]self.model.append(nn.Dense(256, 1))self.model.append(nn.Sigmoid()) # 二分类激活函数将实数映射到[0,1]def construct(self, x):x_flat ops.reshape(x, (-1, img_size * img_size))return self.model(x_flat)net_d Discriminator() net_d.update_parameters_name(discriminator)2.3 损失函数计算 # 损失函数 adversarial_loss nn.BCELoss(reductionmean)# 损失及梯度计算函数 # 生成器计算损失过程 def generator_forward(test_noises):fake_data net_g(test_noises)fake_out net_d(fake_data)loss_g adversarial_loss(fake_out, ops.ones_like(fake_out))return loss_g# 判别器计算损失过程 def discriminator_forward(real_data, test_noises):fake_data net_g(test_noises)fake_out net_d(fake_data)real_out net_d(real_data)real_loss adversarial_loss(real_out, ops.ones_like(real_out))fake_loss adversarial_loss(fake_out, ops.zeros_like(fake_out))loss_d real_loss fake_lossreturn loss_d2.4 训练和反向传播 def train_step(real_data, latent_code):# 计算判别器损失和梯度# 前向计算 得到损失函数和梯度参数# 反向传播 使用梯度参数进行权重参数更新loss_d, grads_d grad_d(real_data, latent_code)optimizer_d(grads_d)loss_g, grads_g grad_g(latent_code)optimizer_g(grads_g)return loss_d, loss_g3. 实验结果分析 写在前面——在正式进行实验前还有一些随机性的探索。 其中值得一提的是比起直接把256张照片一整个当成一个批次epoch来训练的话在一个epoch内将整个数据集分成几个batch效果会好得多下面的所有的实验都是在这种情况下进行的训练。 3.0 baseline 以下是使用SGD优化器在学习率lr0.01并且训练100个epoch后的结果。 3.0.1 损失函数 3.0.2 last picture 3.0.3 gif picture 学习率是我们进行超参数调节中非常经常用来调节的一个参数而lr0.01是一个很常用的经验值所以这次我们就i用这个值来作为一个实验的起始的参考值。从上面的损失函数的趋势可以看出在一个数值比较小的lr下损失函数的曲线是相对很平滑的。从上面的损失函数的曲线我们也可以看到一个健康的GAN网络训练的过程生成器G的损失和判别器D的损失一般是呈现为在某个区间内相互对峙波动发展的过程。而从上面的结果图来看现在当前的模型是尚未收敛的状态需要 “ 去做更多的学习来让自己收敛。 ” 那么怎么往下去学得更多呢我们知道学习的过程是一个反向传播的过程而控制这个过程的一个重要的参数是学习率也就是说我们可以考虑让学习率高一些这样就可以学得更快一些。从另外一个角度来说我们也可以考虑“学得久一些”比如增大epoch看看效果会怎么样而这就是我们本文所研究的两条调参路线。 3.1 epoch不变的情况下提高学习率 3.1.1 损失函数 SGD优化器100个epoch学习率lr0.05 SGD优化器100个epoch学习率lr0.10 SGD优化器100个epoch学习率lr0.20 3.1.2 last picture SGD优化器100个epoch学习率lr0.05 SGD优化器100个epoch学习率lr0.10 SGD优化器100个epoch学习率lr0.20 3.1.3 gif picture SGD优化器100个epoch学习率lr0.05 SGD优化器100个epoch学习率lr0.10 SGD优化器100个epoch学习率lr0.20 从上面的部分结果来看的话在只变动学习率的情况下对于当前的例子使用更大的学习率确实能够加速模型的收敛让生成器最后的效果呈现出一种比较不错的效果至少整个图片看起来已经是很像一张向日葵的图片。这个是一个不错的进步。但是依然产生了一些新的问题比如因为学习率变大虽然收敛的速度变快了但是损失函数却不是很平滑充满了各种爆炸的毛刺的气息这让我想到了过拟合和不稳定。 3.2 试试增加epoch 3.2.1 损失函数 SGD优化器200个epoch学习率lr0.05 SGD优化器200个epoch学习率lr0.10 SGD优化器200个epoch学习率lr0.20 3.2.2 last picture SGD优化器200个epoch学习率lr0.05 SGD优化器200个epoch学习率lr0.10 SGD优化器200个epoch学习率lr0.20 3.2.3 gif picture SGD优化器200个epoch学习率lr0.05 SGD优化器200个epoch学习率lr0.10 SGD优化器200个epoch学习率lr0.20 从最后的效果来看把epoch增多最后生成的照片的细腻程度远比仅有100个epoch的最后的成片的效果好了很多。由此可见在学习率合理的情况下去增大训练的epoch量也确实是能比较不错地提升GAN网络最后生成的图片的效果。不过也产生了许多新的问题从上面的这些损失函数可以找到一个共性那就是在初期的epoch中生成器G的损失值是在判别器的损失值的之下的而随着训练的epoch的量足够大之后在中后期会出现判别器D的损失值不断下降而生成器的损失值则开始上升的情况。这其实直接说明了在这些阶段中继续增大epoch可能并不能很好地朝着我们想要的训练出一个效果更好的生成器的方向演变了。从部分实验结果中我们可以发现当判别器D的能力相比生成器G更强的时候G为了能够继续优化往往就会向模式崩塌的方向走去它会开始投机取巧使得最后生成出来的图片会普遍有某种类似在个性上就不够有好效果了。我们称其为泛化能力不够。 这里我以我训练了500个epoch的一些过程性的截图来展示SGD优化器1个epoch学习率lr0.25 SGD优化器50个epoch学习率lr0.25 SGD优化器100个epoch学习率lr0.25 SGD优化器150个epoch学习率lr0.25 SGD优化器200个epoch学习率lr0.25 SGD优化器250个epoch学习率lr0.25 SGD优化器300个epoch学习率lr0.25 SGD优化器350个epoch学习率lr0.25 SGD优化器400个epoch学习率lr0.25 SGD优化器450个epoch学习率lr0.25 SGD优化器500个epoch学习率lr0.25 特别指出这个例子的原因是我发现epoch增大越到后期生成出来的向日葵就基本都是怼脸向日葵居多而前面还能看到的苗条向日葵则其实基本偏少了更不用说其他更有特性的向日葵了。当我返回去看这256张向日葵的数据集的时候我发现其实原始的相册中其实居多的也主要是怼脸向日葵其次是苗条向日葵最后是一些零散的各类较有个性的向日葵。尤次可见最后的最后我们导向的结果依然是最后影响一个模型的质量的还是回到了训练这个模型的数据集的质量。高质量的数据处理对模型的训练是非常非常非常重要的 数据集照片情况概览 4. 目前比较不错的效果展示 以下是使用SGD优化器学习率为0.25训练了500个epoch的一个演变效果。 5. 一些其它问题和小小的总结 总得来说经过本次实验的探究其实我所在对抗的主要是两个问题 生成的图片不像我的目的图像的问题。欠拟合未收敛”生成的图片大多长得类似或者甚至一模一样“过拟合模式崩塌 结合做了以上那么多的实验来看我现在对GAN网络的两个模型的损失函数的理解是正常的情况G和D应该是两条有波动但整体上是对峙者推进的一上一下的趋势其中最好是G在下而D在上。这样的状态持续得越多个epoch最终我们得到的生成器的综合效果就会越佳而一旦打破了这个平衡生成器的质量就会往某一个方向偏移一般是模式崩塌即判别器不断在进化使得判别器太强而生成器只能通过投机取巧的方式来精学某一类来保持它能继续保持能骗过生成器。所以如何达到平衡是一个值得深入研究的方向。 参考资料 [1] GOODFELLOW I, POUGET-ABADIE J, MIRZA M, et al. Generative Adversarial Nets[J/OL]. Journal of Japan Society for Fuzzy Theory and Intelligent Informatics, 2017: 177-177. http://dx.doi.org/10.3156/jsoft.29.5_177_2. DOI:10.3156/jsoft.29.5_177_2.GAN图像生成-mindspore
http://www.eeditor.cn/news/124591/

相关文章:

  • 网站建设基础ppt看啥网一个没有人工干预的网
  • 株洲网站排名优化价格成都市建设厅官方网站
  • 公司注销后 网站备案做网站需要会什么 知乎
  • 内江市网站建设培训wordpress 商家 用户
  • 广州网站改版设计新版wordpress头像
  • 网站建设项目经理如何用微信做网站
  • 深圳外贸网站优化哪家好南昌seo推广外包
  • 网站名称需要用注册吗湖南网站建设 莫道
  • 网站应当实现那些功能 流程如何设计西安创意网站建设
  • 培训机构 网站建设wordpress 可以上传存储附件
  • 织梦网站logo怎么换网站建设是否包含等保
  • 索莱宝做网站推广普通话内容50字
  • 漳州微网站建设公司推荐工程师招聘网站
  • 外外贸网站推广方案免费模板素材软件
  • 专业的句容网站建设广告营销案例100例
  • 上饶建设银行网站正规代加工在哪里找
  • 深圳网站建设就q479185700顶上沧州大型企业网站建设
  • 哪些安防公司做了手机网站apicloud安装wordpress
  • 网上做翻译兼职网站好房产网签
  • dw做网站菜单栏网站建设 华博互联
  • 做标准件网站哈尔滨建设信息网
  • 响应式网站用什么开发的郑州seo管理
  • 网页设计比较优秀的网站北京网站开发外包
  • 对接 网站后台龙岩seo外包公司
  • 用vs做的网站怎么打开吗蚌埠企业网站建设
  • 基于php技术的小型企业网站开发凡科建站快车官网
  • 电子商务网站开发基础电商培训视频教程
  • 佛山网站建设怎么办门户网站 用什么语言
  • 如何将视频添加到网站上建设校园网站必要性
  • 免费开发个人网站百度推广关键词价格查询