生成对抗网络(Generative Adversial Network,GAN)原理简介

  生成对抗网络(GAN)是深度学习中一类比较大的家族,主要功能是实现图像、音乐或文本等生成(或者说是创作),生成对抗网络的主要思想是:通过生成器(generator)与判别器(discriminator)不断对抗进行训练。最终使得判别器难以分辨生成器生成的数据(图片,音频等)和真实的数据。所以,对于生成对抗网络,我们最终的目标一般是得到生成器,因为训练结束后我们是需要得到神经网络创作出来的作品。

一:基本原理

  生成对抗网络的基本思想是训练过程中生成网络(生成器,generator)与判别网络(判别器,discriminator)不断对抗的过程。所以,无论GAN模型多么复杂,基本思想仍是这两种网络的对抗,基本结构一定要有生成器与判别器。

  为了了解GAN的一般过程,兔兔以一个经典的例子来说明。我们假设生成器是一个普通的画家,判别器是名画鉴别师。一开始这个画家的画的赝品很容易被鉴别师识别出来,然后画家再想办法使画更像真的名画,但是鉴别师之后还是能够识别。不过在一次次被鉴别的过程中,画家的画技逐渐炉火纯青,而鉴别师的鉴别水平也逐渐提高。所以最终画家可能画得十分逼真,与真的名画相差无几,以至于鉴别师也分辨不出来了。

  以上例子只是一个很笼统的比喻。如果更细致一些,实际的过程是:把一些真的画和画家的假画给鉴别师,告诉鉴别师哪个是真,哪个是假,这个过程实际上是训练鉴别师;然后画家画几幅画给鉴别师,如果有一些画被鉴别师鉴别出来了,画家需要根据这些被鉴别出来的画进行反思,使得之后的画作尽量不要被鉴别师鉴别出来,这个过程是训练画家;然后还是将真画与画家的假画交给鉴别师,告诉他哪个是真,哪个是假......这个过程依次交替进行,直到训练结束。

  以上这个过程实际上就是GAN的大致思路了。

  接下来是GAN的具体结构。兔兔以图片的生成为例,这也是GAN最经典的应用,并且这里先不讲解以文字生成图像的stack-GAN等模型,仅仅是最简单的GAN。

  GAN一般情况下可以看做是无监督学习,因为我们训练的数据只有真实的图片,并没有标签。这里使用的标签也仅仅是真实数据的"真"与生成器生成图片的"假"。

1.生成器(generator)

  首先,对于生成器,其内部一般是多层卷积、全连接层等构成的网络,并且采用上采样,通过接收的噪声来生成一个大小合适的图片。这里的噪声其实就是服从某些分布的随机数,一般选取正态分布随机数,该随机数组成一个长度为n的向量,每个这样的向量最终都会生成一个对应的图片。从某种意义来说,正是这种随机数的存在,每次生成的图片都会不同,但图片是否长得像真的,则取决于generator。当然,随机数的概率分布对图像也是有影响的,如果训练时用高斯噪声,那么使用时也要用这个噪声。

2.判别器(discriminator)

  对于判别器,其内部一般也是多层卷积,全连接等层组成的网络,并且采用下采样,它接收一个批次的图片(batch,c,w,h),每个图片都相应标记为真或假(batch,1)(标签也可以用one-hot编码表示(batch,2)),其中假图片是generator生成的。判别器的训练过程和我们以往的监督学习的训练方法是一致的。

3.生成对抗模型(GAN,adversarial model)

  在构建好generator与discriminator后,将两个组合起来,形成对抗网络GAN,用来训练生成网络。

  对于GAN,它接收一批次噪声,输出为“真”或“假”标签,如果为真,说明生成器生成的这个图片骗过了判别器,否则根据这个损失来调整generator内部参数。这个训练过程也和以往的监督学习的训练方法相同,不过这里的discriminator参数不能更改,只有generator内部参数可以改,毕竟这是训练生成器的过程,而不是训练判别器;并且标签是"True",因为我们是想让generator生成的图像看起来更像是真的。

  整个训练的过程为:

(1).从高斯分布中采样一批次长度为n的噪声向量。

(2).利用(1)中噪声向量,使用generator生成假图像。

(3).从真实数据采一批次真实图像,与(2)中的假图像混合,做好标签,训练discriminator。

(4).再从高斯分布中采样长度为n的一批次噪声向量,标签为“True”,训练GAN,此时GAN中的discriminator参数不能更新,只训练generator。

(5).按指定轮数重复上述步骤。

二:基本框架

import torch
import  numpy as np
from torch.utils.data import DataLoader
from torch import nn
import argparseclass Generator(nn.Module):'''生成器'''def __init__(self):super(Generator, self).__init__()passdef forward(self,input):pass
class Discriminator(nn.Module):'''判别器'''def __init__(self):super(Discriminator, self).__init__()passdef forward(self,input):pass
class GAN(nn.Module):'''GAN模型'''def __init__(self):super(GAN, self).__init__()self.gene=Generator()self.gene.requires_grad_(True)self.disc=Discriminator()self.disc.requires_grad_(False)def forward(self,input):out=self.gene(input)out=self.disc(out)return out
class dataset:'''真实图片数据集'''def __init__(self):passdef __len__(self):passdef __getitem__(self, item):pass
if __name__=='__main__':parser=argparse.ArgumentParser()parser.add_argument('--epoch',type=int,default=10,help='the train epoch')parser.add_argument('--n',type=int,default=200,help='the length of noise')parser.add_argument('--noise_batch',type=int,default=10,help='the batch size of noise')parser.add_argument('--true_batch',type=int,default=10,help='the batch size of true picture')opt=parser.parse_args()gene=Generator()disc=Discriminator()gan=GAN()disc_optim=torch.optim.Adam(disc.parameters())gan_optim=torch.optim.Adam(gan.parameters())criterion=nn.MSELoss()for i in range(opt.epoch):true_pict = DataLoader(dataset(), batch_size=opt.true_batch, shuffle=True)for batch in true_pict:noise=torch.tensor(np.random.normal((opt.noise_batch,opt.n)),dtype=torch.float32)false_pict=gene(noise)label_true=torch.tensor(np.ones(shape=opt.true_batch),dtype=torch.float32)label_fake=torch.tensor(np.ones(shape=opt.noise_batch),dtype=torch.float32)loss_true=criterion(batch,label_true)loss_fake=criterion(false_pict,label_fake)disc_optim.zero_grad()loss_fake.backward()loss_true.backward()loss_fake.step()loss_true.step()noise1=torch.tensor(np.random.normal((opt.noise_batch,opt.n)),dtype=torch.float32)pict=gene(noise1)label=torch.tensor(np.ones(shape=(opt.noise_batch,opt.n)),dtype=torch.float32)loss_gan=criterion(pict,label)loss_gan.zero_grad()loss_gan.backward()loss_gan.step()

当然,关于内部的训练批次等问题,以及判别网络与生成网络每次的训练次数,有时是需要具体问题具体分析的。

三:总结:

生成对抗网络的发展时间并不长,但是目前却已经有非常多的GAN模型,并由GAN衍生出提出许多新的方法。生成对抗网络不仅打开了深度学习在创作领域的大门,更重要的是它所带来的一种新法方法与思想,对诸多领域有着深远影响。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快讯|莫言用 ChatGPT 写《颁奖辞》;特斯拉人形机器人集体出街!已与FSD算法打通

一分钟速览新闻点 言用 ChatGPT 写《颁奖辞》孙其君研究员团队 Adv. Funct. Mater.:多功能离子凝胶纤维膜用于能量离电皮肤微软CEO反驳马斯克:我们没有控制OpenAI特斯拉人形机器人集体出街!已与FSD算法打通微软CEO称小型公司仍可在人工智能领…

从供应链到价值链:人形机器人产业链深入研究

原创 | 文 BFT机器人 01 人形机器人产业进展:AI赋能,人形机器人迭代有望加速 目前人形机器人产业所处从“0”到“1”的萌芽期,从现在到未来的时间里,人形机器人以其仿人外形、身体构成及其智能大脑,能极大解放生产力、…

人形机器人火出圈!OpenAI领投挪威人形机器人公司“1X”

文|牛逼的AI 编|猫猫咪子 源|AI源起 目前已经实现了对接GPT4技术的机器人Ameca,它拥有逼真的外观和丰富的表情。 随着人形机器人技术的飞速发展,未来可能不再适用阿西莫夫所提出的“机器人三定律”,因为超级…

chatgpt赋能python:Python登录界面制作指南

Python登录界面制作指南 介绍 登录界面是许多应用程序的关键组成部分之一。Python作为一种优秀的编程语言,拥有着强大的界面开发框架,能够帮助开发人员更轻松地创作出完美的登录界面。 在本文中,我们将向您介绍使用Python如何制作一个简单…

The Journal of Neuroscience: 珠心算训练有助于提高儿童的视觉空间工作记忆

《本文同步发布于“脑之说”微信公众号,欢迎搜索关注~~》 珠心算是指个体在熟练进行珠算操作后,可摆脱实际算盘,借助大脑中虚拟算盘进行数字计算的方式(图1)。早期行为学研究表明,珠心算个体的数字计算能力…

php珠心算源码,深度解析珠心算的“开智”功能

编者按:本文来自李绵军校长在廊坊智慧特训营演讲。李绵军校长通过十几年来对珠心算的钻研练习,详细解读了珠心算的开智功能,以及“一门深入”的作用。 珠心算的开智价值是在哪里?大家都说开发智力,我在这讲开发智力不是…

php珠心算源码,NOIP201401珠心算测验

珠心算测验 问题描述】 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方…

雨课堂提交作业步骤 10步帮你弄好

1 2 3 4 5 6 7 中间计数记错了… 8 9 10 弹出对话框,点击确认即可 提交成功的截图:

2022李宏毅作业hw4 - 挫败感十足的一次作业。

系列文章: 2022李宏毅作业hw1—新冠阳性人员数量预测。_亮子李的博客-CSDN博客_李宏毅hw1 hw-2 李宏毅2022年作业2 phoneme识别 单strong-hmm详细解释。_亮子李的博客-CSDN博客_李宏毅hw2 2021李宏毅作业hw3 --食物分类。对比出来的80准确率。_亮子李的博客-CSDN博客…

php老师的一个作业展示

1.在ScanCode.php中 在judgeTrayCodeEnableIntoWarehouse方法中: 2在CommitTrayCodes.php中 访问时,直接访问CommitTrayCodes.php,这个CommitTrayCodes.php是要建在controller下,建议导一下,老师的数据库,以防止命名…

HCIA网络课程第七周作业

(1)请用自己的语言描述基本ACL和高级ACL的区别 (2)AAA支持的认证、授权和计费方式分别有哪几种? AAA支持的认证方式有不认证 本地认证 远端认证AAA支持的授权方式为不授权 本地授权 远端授权AAA支持计费方式为不计费…

如何获取抖音和快手直播间的直播流地址

如下是通过python代码脚本获取的方法: import requests import re def get_real_url(rid): try: if ‘v.douyin.com‘ in rid: room_id re.findall(r‘(\d{19})‘, requests.get(urlrid).url)[0] else: room_id rid room_url ‘https://webcast-hl.amemv.com/…

新手如何做抖音直播带货?新号如何快速获取直播推荐流量?

如果要做抖音直播带货的话,首先需要开通抖音直播带货权限。也就是我们经常说的解锁抖音直播购物车功能。解锁直播购物车后,我们就能在直播中售卖商品。 而在此之前,你要先开通商品橱窗并解锁视频购物车。开通商品橱窗,在完成新手…

抖音直播如何获取推流地址?不到1000粉也能直播啦。还能加热。2020年12月29日

抖音直播自从出了自己的pc客户端(直播伴侣)后,直播推流地址已不再对外暴漏。 正常情况下,粉丝大于1000,才可使用抖音官方的推流工具(直播伴侣)。但对于粉丝数不够1000,也想用第三方推流工具(如…

短视频、直播平台——电商直播源码第三方SDK接入教程

现在网络视频直播行业非常火爆,所以很多公司也希望开发直播平台,一般直播平台需要用户给主播送礼物来实现盈利,所以刷礼物的功能是必备的,另外为了增加视频的美感与炫酷等特效功能,也需要用到美颜与视频滤镜等功能&…

2022-5月如何使用疯狂URL获取抖音推流码地址(抖音无人直播教程)

什么是推流地址?平时我们如果是下载直播,叫拉流。但如果是你自己要直播,属于上传直播流数据,叫推流,即:把直播流数据推送到视频服务器,然后别人才能看到直播画面 推流地址有什么用?…

抖音短视频开通PC电脑上直播技术实现

忽如一夜春风来,直播带货满地开。互联网的江湖,是游戏的,是广告的,是直播的,是短视频的,但是归根结底是卖货的——也就是电商啦。 2020年可以看出短视频带货是未来大方向的趋势,最新抖音直播带货…

obs多路推流的实现,抖音直播、快手、淘宝、拼夕夕多平台一个画面同时直播,无人直播

最近最火的软件,无非抖音。抖音最火的内容无非是直播带货,而直播带货的平台有抖音、快手、淘宝、拼夕夕。 直播少不了主播,请一个主播不容易,可能月薪几万,成本较高。而如果自己培养一个主播,成功的概率较…

无人直播带货怎么操作:抖音无人直播视频素材+技术教程+软件工具

通过本文循序渐进的抖音无人直播实操技术指南,了解如何在抖音上编辑视频并让它大放异彩。      几年前,学习如何在抖音上编辑视频可能不是你想做的事情,但在社会最混乱的年份之一,抖音却从中受益。作为App Store和Google Play…

元宇宙| 用虚拟人进行抖音/快手直播

在上一篇文章零基础开启元宇宙——创建虚拟形象中,我们实现了创建虚拟形象,接下来我们可以利用虚拟形象“为所欲为”。今天我们利用虚拟形象在短视频平台如快手、抖音中直播,对于不希望露脸的主播们这是可是一大利器呀!话不多说&a…