GAN(生成对抗网络)

这篇具有很好参考价值的文章主要介绍了GAN(生成对抗网络)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介:GAN生成对抗网络本质上是一种思想,其依靠神经网络能够拟合任意函数的能力,设计了一种架构来实现数据的生成。

原理:GAN的原理就是最小化生成器Generator的损失,但是在最小化损失的过程中加入了一个约束,这个约束就是使Generator生成的数据满足我们指定数据的分布,GAN的巧妙之处在于使用一个神经网络(鉴别器Discriminator)来自动判断生成的数据是否符合我们所需要的分布。

实现细节:

一:

        准备好我们想要让生成器生成的数据类型,比如MINIST手写数字集,包含1-10十个数字,一共60000张图片。生成器的目的就是学习这个数据集的分布。

二,

        定义一个生成器,用于判别一张图片是实际的还是生成器生成的,当生成器完美学习得到数据分布之后,鉴别器可能就分不清图片是生成器的还是实际的,这样的话生成器就能生成我们想要的图片了。

        生成器的训练过程为:实际数据输出结果1,生成数据输出结果为0,目的是学会区分真假数据,相当于提供一个约束,使生成数据符合指定分布。当鉴别生成器的数据分布时,只需要更新鉴别器的参数权重,不能够通过计算图将生成器的参数进行更新。

三,

        定义一个生成器,给定一个输入,他就能生成1-10里面的一个数字的图片。生成器的反向更新是根据鉴别器的损失来确定(被约束进行反向更新)。生成器的网络权重参数是单独的,反向更新时,只需要更新计算图当中属于生成器部分的参数。

下面给出生成1-0-1-0数据格式的代码:

# %%
import torch
import numpy
import torch.nn as nn
import matplotlib.pyplot as plt

# %%
def gennerate1010():
    return torch.FloatTensor([numpy.random.uniform(0.9,1.1),
                              numpy.random.uniform(0.,.1),
                              numpy.random.uniform(0.9,1.1),
                              numpy.random.uniform(0.0,.1)])

# %%
def genneratexxxx():
    return torch.rand(4)

# %%
class Discrimer(nn.Module):
    def __init__(self) -> None:
        father_obj = super(Discrimer,self)
        father_obj.__init__()
        self.create_model()
        self.counter = 0
        self.progress = []
        
    def create_model(self):
        self.model = nn.Sequential(
            nn.Linear(4,3),
            nn.Sigmoid(),
            nn.Linear(3,1),
            nn.Sigmoid(),           
        )
        self.loss_functon = nn.MSELoss()
        self.optimiser = torch.optim.SGD(self.parameters(),lr=0.01)
        
    def forward(self,x):
        return self.model(x)
    
    def train(self,x,targets):
        outputs = self.forward(x)
        loss = self.loss_functon(outputs,targets)
        self.counter += 1
        if self.counter%10 == 0:
            self.progress.append(loss.item())
        if self.counter%10000 == 0:
            print(self.counter)
            
            
        self.optimiser.zero_grad()
        loss.backward()
        self.optimiser.step()
        
    def plotprogress(self):
        plt.plot(self.progress,marker='*')
        plt.show()

        

# %%
class Gennerater(nn.Module):
    def __init__(self) -> None:
        father_obj = super(Gennerater,self)
        father_obj.__init__()
        self.create_model()
        self.counter = 0
        self.progress = []

        
    def create_model(self):
        self.model = nn.Sequential(
            nn.Linear(1,3),
            nn.Sigmoid(),
            nn.Linear(3,4),
            nn.Sigmoid(),           
        )
        # 这个优化器只能优化生成器部分的参数
        self.optimiser = torch.optim.SGD(self.parameters(),lr=0.01)
        
    def forward(self,x):
        return self.model(x)
    
    def train(self,D,x,targets):
        g_outputs = self.forward(x)
        d_outputs = D.forward(g_outputs)
        # 使用鉴别器的loss函数,但是只更新生成器的参数,生成器的参数需要根据鉴别器的约束进行更新
        loss = D.loss_functon(d_outputs,targets)
        self.counter += 1
        if self.counter%10 == 0:
            self.progress.append(loss.item())
        if self.counter%10000 == 0:
            print(self.counter)
            
            
        self.optimiser.zero_grad()
        loss.backward()
        self.optimiser.step()
        
    def plotprogress(self):
        plt.plot(self.progress,marker='*')
        plt.show()


# %%
D = Discrimer()

# %%
G = Gennerater()


# %%
for id in range(15000):
    # 喂入实际数据给鉴别器
    D.train(gennerate1010(),torch.FloatTensor([1.]))
    # 喂入生成的数据,使用detach从计算图脱离,用于更新鉴别器,而生成器得不到更新
    D.train(G.forward(torch.FloatTensor([0.5]).detach()),torch.FloatTensor([0.0]))
    G.train(D,torch.FloatTensor([0.5]),torch.FloatTensor([1.]))
    

# %%
D.plotprogress()

# %%
G.plotprogress()

# %%
G.forward(torch.FloatTensor([0.5]))


参考:PyTorch生成对抗网络编程文章来源地址https://www.toymoban.com/news/detail-667857.html

到了这里,关于GAN(生成对抗网络)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计:基于卷积神经网络的古诗词生成系统 人工智能

    目录  前言 设计思路       一、课题背景与意义       二、算法理论原理                2.1 深度学习                2.2 神经网络       三、检测的实现                3.1 数据集                3.2 实验环境搭建                3.3 模型训练 最后        📅大

    2024年04月12日
    浏览(34)
  • Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化...

    生成对抗网络(GAN)是一种神经网络,可以生成类似于人类产生的材料,如图像、音乐、语音或文本 ( 点击文末“阅读原文”获取完整 代码数据 )。 相关视频 最近我们被客户要求撰写关于GAN生成对抗性神经网络的研究报告,包括一些图形和统计输出。 近年来,GAN一直是研

    2024年02月09日
    浏览(37)
  • 【ChatGPT】人工智能生成内容的综合调查(AIGC):从 GAN 到 ChatGPT 的生成人工智能历史

      :AIGC,Artificial Intelligence Generated Content   【禅与计算机程序设计艺术:导读】 2022年,可以说是生成式AI的元年。近日,俞士纶团队发表了一篇关于AIGC全面调查,介绍了从GAN到ChatGPT的发展史。 论文地址: https://arxiv.org/pdf/2303.04226.pdf 刚刚过去的2022年,无疑是生成式

    2023年04月18日
    浏览(65)
  • 人工智能|深度学习——基于对抗网络的室内定位系统

    基于CSI的工业互联网深度学习定位.zip资源-CSDN文库 室内定位技术是工业互联网相关技术的关键一环。 该技术旨在解决于室外定位且取得良好效果的GPS由于建筑物阻挡无法应用于室内的问题 。实现室内定位技术,能够在真实工业场景下实时追踪和调配人员并做到对自动化生产

    2024年02月20日
    浏览(33)
  • 人工智能-神经网络

    目录 1 神经元 2 MP模型 3 激活函数       3.1 激活函数       3.2 激活函数作用       3.3 激活函数有多种 4、神经网络模型 5、神经网络应用 6、存在的问题及解决方案 6.1 存在问题 6.2 解决方案-反向传播        神经元是主要由 树突、轴突、突出 组成, 树突 是从上面接收很

    2024年02月16日
    浏览(40)
  • 人工智能 -- 神经网络

    什么是人工智能?通俗来讲,就是让机器能像人一样思考。这个无需解释太多,因为通过各种科幻电影我们已经对人工智能很熟悉了。大家现在感兴趣的应该是——如何实现人工智能? 从1956年夏季首次提出“人工智能”这一术语开始,科学家们尝试了各种方法来实现它。这

    2024年02月05日
    浏览(44)
  • AI技术在网络攻击中的滥用与对抗 - 人工智能恶意攻击

    随着人工智能技术的迅猛发展,我们享受到了许多便利,但同时也面临着新的安全威胁。本文将探讨人工智能技术在网络攻击中的滥用,并提出一些防御机制。 人工智能技术的先进性和灵活性使其成为恶意攻击者的有力工具。以下是一些常见的人工智能滥用案例: 欺骗和钓

    2024年02月12日
    浏览(30)
  • 人工智能-卷积神经网络

            人和动物如何把看到的图像转化为大脑中的一个概念?         我们知道计算机是把图转换为一大堆数字,通过训练可以知道这堆数字代表什么含义。但通过前面学过神经网络模型和梯度下降法的方法训练费时费力,而且一旦图片进行改变如缩放、旋转或其他变换,

    2024年02月16日
    浏览(39)
  • 人工智能-线性神经网络

    线性神经网络 在介绍深度神经网络之前,我们需要了解神经网络训练的基础知识。 本章我们将介绍神经网络的整个训练过程, 包括:定义简单的神经网络架构、数据处理、指定损失函数和如何训练模型。 为了更容易学习,我们将从经典算法———— 线性 神经网络开始,介

    2024年02月06日
    浏览(37)
  • 【复习】人工智能 第 8 章 人工神经网络及其应用

    因为计算牵扯到导数,所以这章难的部分不会考太难。 人工神经网络是对人脑或生物神经网络若干基本特性的抽象和模拟。 深度学习是神经网络的发展。 人工智能曾经历过很长一段时间的停滞不前。 浩瀚的宇宙中,也许只有包含数千忆颗星球的银河系的复杂性能够与大脑相

    2024年01月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包