您当前的位置:钢材 > 型钢 > 市场分析

生成对抗网络的生成器,gan生成对抗网络应用

2024-03-24 18:09:43 来源:头条 作者: chanong
分享到
关注德勤钢铁网在线:
  • 扫描二维码

    关注√

    德勤钢铁网微信

在线咨询:
  • 扫描或点击关注德勤钢铁网在线客服

来源:AI有道

本文长约2820字,建议12分钟。

在这篇文章中,我们将向大家介绍生成对抗网络(GAN),并用最容易理解的术语进行解释,最后实现一个简单的GAN 程序,帮助大家更好地理解它。

什么是癌症?

GAN非常强大,但是它的模型结构是什么呢?我们之前学**的机器学**或者神经网络模型主要可以做两件事。这是我们都熟悉的预测和分类。那么,机械模型能否自动生成图像和声音呢?并且通过调整不同模型的输入向量,我们可以获得特定的图像和声音。例如,您可以调整输入参数以获得红发蓝眼的脸部,也可以调整输入参数以获得女性音频片段。换句话说,这样的机器模型可以根据需求自动生成所需要的东西。这就是GAN 诞生的地方!

GAN(生成对抗网络)主要由两个模块组成。

生成器(生成模型)和判别器模型(判别模型)互相玩游戏,学**产生非常好的输出。以摄影为例,生成器的主要任务是学**一组真实图像,使其生成的图像接近真实图像并“欺骗”鉴别器。判别器的主要任务是找到生成器产生的图像,将它们与真实图像区分开来,并判断它们是真还是假。在整个迭代过程中,生成器不断努力使生成的图像越来越真实,而鉴别器则不断努力识别图像的真实性。这类似于生成器和判别器之间的游戏。最终,通过反复迭代,两者会达到平衡。生成器产生的图像将非常接近真实图像,但鉴别器将难以识别真假图像之间的差异。表现是判别器对于真假照片的概率输出接近0.5。

对GAN 的概念还有点困惑吗?没关系。请举一个生动的例子来解释。

最近在看黄老师的画,想画一些类似的东西,所以就想学美术。范主的照片是这样的。

我只是想画画,所以我请了研究黄教授多年作品的王教授来教我。王教授经验丰富,洞察力敏锐,即使是模仿扇子大师的商业画也逃不过他的洞察力。王教授对我说: “如果你的照片能骗过我,就算你成功了。”

我很兴奋,立刻画了这张图给王教授。

王教授淡淡一笑,满脸黑线,气得浑身发抖。 “0分!这也是一幅画吗?太不一样了!”听到王教授的话,我开始反思自己。嗯,我绝对不擅长画画,地上没有眼睛鼻子。于是我又画了一张。

王教授见状,两秒内就吐出了四个字。 1分。重画!当我觉得还是不行或者画得太烂的时候,我又研究了范老师的画风,不断改进、再创作,有一天我给王老师看了一幅新画。

王教授看到了,说有点像。我需要仔细看看。最后我还是说:“不行不行,细节太差了!”继续重新绘制。哎哟,王教授越来越严格了!我叹了口气,回去继续研究,最后把那张非常满意的画交给了王教授看。

这时,王教授戴上眼镜,仔细地分析了一下,过了一会儿,王教授拍拍我的肩膀说:“画得真好,真假难辨。” ” 塔。哈哈,我很高兴,因为得到了王老师的赞扬和肯定,我感觉自己终于可以像黄老师一样画画了。下一步是考虑换工作。

好的,例子就是这样(我会接受你对我绘画天赋的抱怨)。这个例子实际上是一个GAN的训练过程。我是一个生成器,我的目的是输出一张可以欺骗王教授的图片,让王教授难以辨别真假。王教授是一个鉴别器,他的目的就是鉴别我的画,判断它是不是赝品。整个过程就是一个“生成器对决”的游戏过程,最终我(生成器)会输出一张“假与真”的图片,连王教授(识别者)都难以辨别。

这就是甘。

GAN模型的基本结构

在了解GAN模型之前,我们先来看看Yann LeCun对未来深度学**关键技术进展的个人看法。

在我看来,最重要的是对抗训练(也称为生成对抗网络的GAN)。这是Ian Goodfellow 最初提出的想法,当时他还是蒙特利尔大学Yoshua Bengio 的学生(后来转到了Google Brain,最近转到了OpenAI)。

在我看来,这个以及当前提出的变体是过去十年中机器学**领域最有趣的想法。

Yann LeCun 认为,GAN 很可能会给深度学**模型带来又一个重大突破,是过去20 年来机器学**领域最酷的想法。 GAN 近年来发展非常强劲。下图显示了最近提交给ICASSP 会议的所有论文中包含“生成”、“对抗性”和“强化”关键词的论文数量。

数据显示,2018年,包含“生成”和“对抗性”关键词的论文数量急剧增加。不难预见,未来几年将会有更多关于GAN 的论文。

我们先介绍一下GAN的基本结构,我们已经知道GAN由生成器和判别器组成,分别记为G和D。以图像生成应用为例,其模型结构如下:

基本的GAN 模型由输入向量、G 网络和D 网络组成。其中,G和D一般由神经网络组成。 G 的输出是图像,但采用全连接格式。 G的输出是D的输入,其中也包含实际的样本集。这样,D尝试为真实样本输出较高的分数,为G生成的样本输出较低的分数。在循环的每次迭代中,G网络不断优化网络参数,使得D不再能区分真假,但D网络也不断优化网络参数以提高识别能力,这就造成了网络参数之间的差距。真样本分数和假样本分数。

经过多次训练迭代,最终建立了GAN模型。

最终的GAN模型中,G生成的样本有假有真,D输出的分数接近0.5,因此很难区分真假样本,训练成功。

这里我们将解释输入向量。输入向量是用来做什么的?实际上,输入向量的每个维度都可以代表输出图像的特定特征。例如,您可以输入向量第一维的值来调整生成图像中的头发颜色。值越高,颜色越红;值越低,颜色越黑。您可以通过在向量的第二维中输入值来调整肤色。通过输入生成的图像矢量,您可以使用3D 值调整生成图像的面部表情和情绪。

这就是GAN的强大之处;通过调整输入向量,可以生成具有各种特征的图像。这些生成的图像不是实际样本集的一部分,而是合理但看不见的图像。是不是很有趣?下图显示不同的向量产生不同的图像。

解释完GAN模型,我们来快速了解一下GAN的算法原理。由于有G和D两个模块,每个模块都有对应的网络参数。

我们先来看D模块,它的目标是让实际样本得分尽可能大,而G产生的样本得分尽可能小。 D的损失函数可以如下获得。

其中,x为实际样本,G(z)为G生成的样本。我们希望D(x) 更大,并且我们希望D(G(z)) 更小。也就是说,我们希望-D(x)尽可能小,并且-log(1-D(G(z)))越小越好。从损失函数的角度来看,我们得到上面的公式。

再看看G模块,它的目标是希望自己生产的模型能够在D上取得更高的分数。则G的损失函数可得:

一旦了解了损失函数,您就可以使用各种优化算法来训练模型。

创建GAN 模型

接下来,使用PyTorch 实现一个简单的GAN 模型。作为创建绘画的示例,假设您创建了以下“名画”(以正弦图为例)。

生成这幅“艺术画”的代码是:

def Artist_works(): # 著名艺术家的画作(实际目标)

r=0.02 * np.random.randn(1, ART_COMPONENTS)

绘画=np.sin(PAINT_POINTS * np.pi) + r

绘画=torch.from_numpy(painting).float()

归还画作

接下来,我们分别定义G网络模型和D网络模型。

G=nn.Sequential( # 生成器

nn.Linear(N_IDEAS, 128),随机想法的数量(可能来自正态分布)

ReLU(),

nn.Linear(128, ART_COMPONENTS), # 根据这些随机想法创作绘画

D=nn.Sequential( # 标识符

nn.Linear(ART_COMPONENTS, 128), # 接收来自著名艺术家或像G 这样的初学者的艺术作品

ReLU(),

nn.线性(128, 1),

nn.Sigmoid(), # 告诉艺术品是由艺术家创作的概率

设置Adam 算法进行优化。

opt_D=torch.optim.Adam(D.parameters(), lr=LR_D)

opt_G=torch.optim.Adam(G.parameters(), lr=LR_G)

最后,我们构建了一个GAN迭代训练流程。

plt.ion() # 关于连续图的一些事情

D_loss_history=[]

G_loss_history=[]

对于(10000): 范围内的步长

Artist_paintings=Artist_works() # 艺术家的真实画作

G_ideas=torch.randn(BATCH_SIZE, N_IDEAS) # 随机想法

G_paintings=G(G_ideas) # G 的假画(随机想法)

prob_artist0=D(artist_paintings) # D 让我们增加这个概率

prob_artist1=D(G_paintings) # D 让我们尝试降低这个概率

D_loss=- torch.mean(torch.log(prob_artist0) + torch.log(1. - prob_artist1))

G_loss=torch.mean(torch.log(1.-prob_artist1))

D_loss_history.append(D_loss)

G_loss_history.append(G_loss)

opt_D.zero_grad()

D_loss.backward(retain_graph=True) # 重用计算图

opt_D.step()

opt_G.zero_grad()

G_loss.backward()

opt_G.step()

if 步骤% 50==0: # 绘图

plt.cla()

plt.plot(PAINT_POINTS[0], G_paintings.data.numpy()[0], c='#4AD631', lw=3, label='生成的油漆',)

plt.plot(PAINT_POINTS[0], np.sin(PAINT_POINTS[0] * np.pi), c='#74BCFF', lw=3, label='标准曲线')

plt.text(-1, 0.75, 'D 精度=%.2f (D 收敛为0.5)' % prob_artist0.data.numpy().mean(), fontdict={'size': 8})

plt.text(-1, 0.5, 'D 分数=%.2f (-1.38 表示G 收敛)' % -D_loss.data.numpy(), fontdict={'size': 8})

plt.ylim((-1, 1));plt.legend(loc='右下角', fontsize=10);plt.draw();plt.pause(0.01)

plt.ioff()

plt.show()

我们使用动态绘图,以便更容易地不断观察GAN 模型的训练状态。

如果迭代次数为1:

如果迭代次数为200:

如果迭代次数为1000:

如果迭代次数为10000:

完美!经过10,000 次训练迭代后,生成的曲线非常接近标准曲线。正如预期,D 的分数接近0.5。

完整的代码有.py 和.ipynb 版本,可以通过搜索下面的链接找到。

https://github.com/RedstoneWill/MachineLearningInAction/tree/master/GAN

责任编辑:德勤钢铁网 标签:

热门搜索

相关文章

广告
德勤钢铁网 |市场分析

生成对抗网络的生成器,gan生成对抗网络应用

chanong

|

来源:AI有道

本文长约2820字,建议12分钟。

在这篇文章中,我们将向大家介绍生成对抗网络(GAN),并用最容易理解的术语进行解释,最后实现一个简单的GAN 程序,帮助大家更好地理解它。

什么是癌症?

GAN非常强大,但是它的模型结构是什么呢?我们之前学**的机器学**或者神经网络模型主要可以做两件事。这是我们都熟悉的预测和分类。那么,机械模型能否自动生成图像和声音呢?并且通过调整不同模型的输入向量,我们可以获得特定的图像和声音。例如,您可以调整输入参数以获得红发蓝眼的脸部,也可以调整输入参数以获得女性音频片段。换句话说,这样的机器模型可以根据需求自动生成所需要的东西。这就是GAN 诞生的地方!

GAN(生成对抗网络)主要由两个模块组成。

生成器(生成模型)和判别器模型(判别模型)互相玩游戏,学**产生非常好的输出。以摄影为例,生成器的主要任务是学**一组真实图像,使其生成的图像接近真实图像并“欺骗”鉴别器。判别器的主要任务是找到生成器产生的图像,将它们与真实图像区分开来,并判断它们是真还是假。在整个迭代过程中,生成器不断努力使生成的图像越来越真实,而鉴别器则不断努力识别图像的真实性。这类似于生成器和判别器之间的游戏。最终,通过反复迭代,两者会达到平衡。生成器产生的图像将非常接近真实图像,但鉴别器将难以识别真假图像之间的差异。表现是判别器对于真假照片的概率输出接近0.5。

对GAN 的概念还有点困惑吗?没关系。请举一个生动的例子来解释。

最近在看黄老师的画,想画一些类似的东西,所以就想学美术。范主的照片是这样的。

我只是想画画,所以我请了研究黄教授多年作品的王教授来教我。王教授经验丰富,洞察力敏锐,即使是模仿扇子大师的商业画也逃不过他的洞察力。王教授对我说: “如果你的照片能骗过我,就算你成功了。”

我很兴奋,立刻画了这张图给王教授。

王教授淡淡一笑,满脸黑线,气得浑身发抖。 “0分!这也是一幅画吗?太不一样了!”听到王教授的话,我开始反思自己。嗯,我绝对不擅长画画,地上没有眼睛鼻子。于是我又画了一张。

王教授见状,两秒内就吐出了四个字。 1分。重画!当我觉得还是不行或者画得太烂的时候,我又研究了范老师的画风,不断改进、再创作,有一天我给王老师看了一幅新画。

王教授看到了,说有点像。我需要仔细看看。最后我还是说:“不行不行,细节太差了!”继续重新绘制。哎哟,王教授越来越严格了!我叹了口气,回去继续研究,最后把那张非常满意的画交给了王教授看。

这时,王教授戴上眼镜,仔细地分析了一下,过了一会儿,王教授拍拍我的肩膀说:“画得真好,真假难辨。” ” 塔。哈哈,我很高兴,因为得到了王老师的赞扬和肯定,我感觉自己终于可以像黄老师一样画画了。下一步是考虑换工作。

好的,例子就是这样(我会接受你对我绘画天赋的抱怨)。这个例子实际上是一个GAN的训练过程。我是一个生成器,我的目的是输出一张可以欺骗王教授的图片,让王教授难以辨别真假。王教授是一个鉴别器,他的目的就是鉴别我的画,判断它是不是赝品。整个过程就是一个“生成器对决”的游戏过程,最终我(生成器)会输出一张“假与真”的图片,连王教授(识别者)都难以辨别。

这就是甘。

GAN模型的基本结构

在了解GAN模型之前,我们先来看看Yann LeCun对未来深度学**关键技术进展的个人看法。

在我看来,最重要的是对抗训练(也称为生成对抗网络的GAN)。这是Ian Goodfellow 最初提出的想法,当时他还是蒙特利尔大学Yoshua Bengio 的学生(后来转到了Google Brain,最近转到了OpenAI)。

在我看来,这个以及当前提出的变体是过去十年中机器学**领域最有趣的想法。

Yann LeCun 认为,GAN 很可能会给深度学**模型带来又一个重大突破,是过去20 年来机器学**领域最酷的想法。 GAN 近年来发展非常强劲。下图显示了最近提交给ICASSP 会议的所有论文中包含“生成”、“对抗性”和“强化”关键词的论文数量。

数据显示,2018年,包含“生成”和“对抗性”关键词的论文数量急剧增加。不难预见,未来几年将会有更多关于GAN 的论文。

我们先介绍一下GAN的基本结构,我们已经知道GAN由生成器和判别器组成,分别记为G和D。以图像生成应用为例,其模型结构如下:

基本的GAN 模型由输入向量、G 网络和D 网络组成。其中,G和D一般由神经网络组成。 G 的输出是图像,但采用全连接格式。 G的输出是D的输入,其中也包含实际的样本集。这样,D尝试为真实样本输出较高的分数,为G生成的样本输出较低的分数。在循环的每次迭代中,G网络不断优化网络参数,使得D不再能区分真假,但D网络也不断优化网络参数以提高识别能力,这就造成了网络参数之间的差距。真样本分数和假样本分数。

经过多次训练迭代,最终建立了GAN模型。

最终的GAN模型中,G生成的样本有假有真,D输出的分数接近0.5,因此很难区分真假样本,训练成功。

这里我们将解释输入向量。输入向量是用来做什么的?实际上,输入向量的每个维度都可以代表输出图像的特定特征。例如,您可以输入向量第一维的值来调整生成图像中的头发颜色。值越高,颜色越红;值越低,颜色越黑。您可以通过在向量的第二维中输入值来调整肤色。通过输入生成的图像矢量,您可以使用3D 值调整生成图像的面部表情和情绪。

这就是GAN的强大之处;通过调整输入向量,可以生成具有各种特征的图像。这些生成的图像不是实际样本集的一部分,而是合理但看不见的图像。是不是很有趣?下图显示不同的向量产生不同的图像。

解释完GAN模型,我们来快速了解一下GAN的算法原理。由于有G和D两个模块,每个模块都有对应的网络参数。

我们先来看D模块,它的目标是让实际样本得分尽可能大,而G产生的样本得分尽可能小。 D的损失函数可以如下获得。

其中,x为实际样本,G(z)为G生成的样本。我们希望D(x) 更大,并且我们希望D(G(z)) 更小。也就是说,我们希望-D(x)尽可能小,并且-log(1-D(G(z)))越小越好。从损失函数的角度来看,我们得到上面的公式。

再看看G模块,它的目标是希望自己生产的模型能够在D上取得更高的分数。则G的损失函数可得:

一旦了解了损失函数,您就可以使用各种优化算法来训练模型。

创建GAN 模型

接下来,使用PyTorch 实现一个简单的GAN 模型。作为创建绘画的示例,假设您创建了以下“名画”(以正弦图为例)。

生成这幅“艺术画”的代码是:

def Artist_works(): # 著名艺术家的画作(实际目标)

r=0.02 * np.random.randn(1, ART_COMPONENTS)

绘画=np.sin(PAINT_POINTS * np.pi) + r

绘画=torch.from_numpy(painting).float()

归还画作

接下来,我们分别定义G网络模型和D网络模型。

G=nn.Sequential( # 生成器

nn.Linear(N_IDEAS, 128),随机想法的数量(可能来自正态分布)

ReLU(),

nn.Linear(128, ART_COMPONENTS), # 根据这些随机想法创作绘画

D=nn.Sequential( # 标识符

nn.Linear(ART_COMPONENTS, 128), # 接收来自著名艺术家或像G 这样的初学者的艺术作品

ReLU(),

nn.线性(128, 1),

nn.Sigmoid(), # 告诉艺术品是由艺术家创作的概率

设置Adam 算法进行优化。

opt_D=torch.optim.Adam(D.parameters(), lr=LR_D)

opt_G=torch.optim.Adam(G.parameters(), lr=LR_G)

最后,我们构建了一个GAN迭代训练流程。

plt.ion() # 关于连续图的一些事情

D_loss_history=[]

G_loss_history=[]

对于(10000): 范围内的步长

Artist_paintings=Artist_works() # 艺术家的真实画作

G_ideas=torch.randn(BATCH_SIZE, N_IDEAS) # 随机想法

G_paintings=G(G_ideas) # G 的假画(随机想法)

prob_artist0=D(artist_paintings) # D 让我们增加这个概率

prob_artist1=D(G_paintings) # D 让我们尝试降低这个概率

D_loss=- torch.mean(torch.log(prob_artist0) + torch.log(1. - prob_artist1))

G_loss=torch.mean(torch.log(1.-prob_artist1))

D_loss_history.append(D_loss)

G_loss_history.append(G_loss)

opt_D.zero_grad()

D_loss.backward(retain_graph=True) # 重用计算图

opt_D.step()

opt_G.zero_grad()

G_loss.backward()

opt_G.step()

if 步骤% 50==0: # 绘图

plt.cla()

plt.plot(PAINT_POINTS[0], G_paintings.data.numpy()[0], c='#4AD631', lw=3, label='生成的油漆',)

plt.plot(PAINT_POINTS[0], np.sin(PAINT_POINTS[0] * np.pi), c='#74BCFF', lw=3, label='标准曲线')

plt.text(-1, 0.75, 'D 精度=%.2f (D 收敛为0.5)' % prob_artist0.data.numpy().mean(), fontdict={'size': 8})

plt.text(-1, 0.5, 'D 分数=%.2f (-1.38 表示G 收敛)' % -D_loss.data.numpy(), fontdict={'size': 8})

plt.ylim((-1, 1));plt.legend(loc='右下角', fontsize=10);plt.draw();plt.pause(0.01)

plt.ioff()

plt.show()

我们使用动态绘图,以便更容易地不断观察GAN 模型的训练状态。

如果迭代次数为1:

如果迭代次数为200:

如果迭代次数为1000:

如果迭代次数为10000:

完美!经过10,000 次训练迭代后,生成的曲线非常接近标准曲线。正如预期,D 的分数接近0.5。

完整的代码有.py 和.ipynb 版本,可以通过搜索下面的链接找到。

https://github.com/RedstoneWill/MachineLearningInAction/tree/master/GAN


市场分析