InfoGAN原理PyTorch实现Debug记录

article/2025/4/20 9:01:14

1. CGAN从无监督GAN改进成有监督的GAN

GAN的基本原理输入是随机噪声,无法控制输出和输入之间的对应关系,也无法控制输出的模式,CGAN全称是条件GAN(Conditional GAN)改进基本的GAN解决了这个问题,CGAN和基本的GAN不同的地方是:
参考下面的链接
https://www.jianshu.com/p/39c57e9a6630
这里面介绍了实现CGAN有三种形式,从网络实现上的三种形式,没有讲解怎样优化目标函数

CGAN的一个问题是输入的有监督标签是离散型输入,如果输入中还有连续型输入,也就是C这个条件是个连续型的,那么将要继续参考InfoGAN

2. InfoGAN

参考下面的链接,非常详细的讲解了InfoGAN的原理、网络结构的实现、损失函数怎样求解
https://www.jianshu.com/p/fa892c81df60
InfoGAN的Info部分和判别器D共用了前面的网络,那么PyTorch怎么实现共用网咯呢?

2.1 参考下面的PyTorch实现

https://mp.weixin.qq.com/s?__biz=MzI3MzkyMzE5Mw==&mid=2247485031&idx=1&sn=e6ccbc33639462d59ee56923c59173b6&chksm=eb1aab71dc6d2267cc52bf769106067c53c867ad6a02063791674937857fb86da36ecd6cbfd9&token=1864035800&lang=zh_CN#rd
在这里插入图片描述
原来PyTorch定义判别器类的时候可以分成三个网络,分别是主网络、D网络和C网络、L网络,D网络和C网络和L网络公用主网络,这个例子中的InfoGAN得输入有随机噪声、离散输入(C部分)、连续输入(L部分),forward中先用主网络处理x,之后返回D网络、C网络和L网络
不得不说,这种写法很有趣啊

3. PyTorch实现Debug记录

我自己实现了InfoGAN网络,运行程序后接二连三出现了很多错误

Bug(1):

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace
参考链接:
https://blog.csdn.net/qq_32953463/article/details/115728762
出现这个错误的原因是Pytorch的版本问题,我的Pytorch是1.11.0版本,如果Pytorch版本低于1.4不会有这个问题,链接中提供了一种不需要重新安装Pytorch的办法,backward()放在一起,step()放在一起,zero_grad()不需要放在一起,如下截图所示,

不得不说,这么神奇,真的解决了

            real_out = netD(real_img).mean()fake_out = netD(fake_img).mean()d_loss = 1 - real_out + fake_outnetD.zero_grad()g_loss = generator_criterion(fake_out, fake_img, real_img)netG.zero_grad()d_loss.backward(retain_graph=True)g_loss.backward()optimizerD.step()optimizerG.step()fake_img = netG(z)fake_out = netD(fake_img).mean()

Bug(2):RuntimeError: Trying to backward through the graph a second time but the buffers have already been f

或者说是pytorch中的retain_graph=True的作用

参考链接:https://blog.csdn.net/qq_39861441/article/details/104129368
总的来说进行一次backward之后,各个节点的值会清除,这样进行第二次backward会报错,如果加上retain_graph==True后,可以再来一次backward。

在这里插入图片描述

上面的示例代码中前两个网络D和G在backward的时候使用了retain_graph=True的参数,最后一个网络没有使用此参数,此参数的默认值是False

如果想了解底层的原理,建议阅读下面的链接,里面的图解非常的有趣
https://blog.csdn.net/SY_qqq/article/details/107384161

Bug(3):

RuntimeError: Found dtype Long but expected Float
这个错误来源于torch需要float类型,但是数据中是int类型或者long类型,解决方法是debug一个一个看变量中哪里出现了int或者long类型,假设variable是int或者long类型的变量,将它转换成float类型

variable = variable.to(torch.float32)

4. CGAN/ACGAN/InfoGAN都是什么?

参考:https://zhuanlan.zhihu.com/p/91592775

首先回顾一下原始GAN的损失函数,没有类别信息
在这里插入图片描述
CGAN提出使用类别标签作为辅助信息,进而指导数据生成过程。**从实现的层面来看,标签信息和噪声数据进行拼接送入生成器,标签信息和真实图片拼接送入判别器,**由此提出了改进版的CGAN损失函数,其中y表示类别标签:
在这里插入图片描述
这里划重点⭐️,CGAN标签信息只是和真实数据拼接之后输入到判别器之后就没有其它操作了,ACGAN还把判别器分成了两个部分,一个部分和基本的GAN的判别器功能相同,判别生成数据是否真实,另一个部分判断生成数据的类别,这两个部分的判别器共用一部分网络结构,ACGAN的判别起的损失函数也分成了2个部分

参考链接中介绍了ACGAN是在CGAN基础上更近一步的改进,将判别器的功能扩展为判别真假以及类别区分,可以认为ACGAN的判别器多出一个分类的功能(pytorch实现部分2.1讨论如何改进判别器结构,从而实现既能判别又能分类的功能)。由此,ACGAN的损失函数也分为了判别损失和分类损失两个部分,其中判别损失和CGAN并没有区别,形式如下:
在这里插入图片描述
在这里插入图片描述
这里再划重点⭐️,ACGAN的输入只有类别标签,是个离散值,损失也只有类别损失,InfoGAN的输入有离散值和连续值,可以是离散值也可以是连续值,也可以是离散值和连续值的拼接,InfoGAN的离散值不一定是类别标签,它可以是表示样本某种离散隐含特征的数值,这时我们再回头看第2部分InfoGAN的基本结构就更清晰了。

第一个图:CGAN的基本结构
CGAN的基本结构

第二个图:InfoGAN的基本结构
InfoGAN基本结构


http://chatgpt.dhexx.cn/article/WwT7LKTT.shtml

相关文章

CGAN和InfoGAN理解

在一些比较经典的GAN模型中(像WGAN、LSGAN、DCGAN等等),往往都是从样本空间里随机采样得到输入噪声,生成的图像究竟属于哪一个类别也是随机的。通过这些模型,我们无法生成指定类别的数据。 举个不恰当的例子&#xff…

InfoGAN

InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Xi Chen, Yan Duan, Rein Houthooft, John Schulman, Ilya Sutskever, Pieter Abbeel https://arxiv.org/abs/1606.03657 一、从GAN到InfoGAN 1.GAN存在的问题 GAN通…

InfoGAN 生成时序序列

InfoGAN 生成时序序列 简介 完整代码:https://github.com/SongDark/timeseries_infogan 本文介绍用InfoGAN生成多维时序序列。 数据 数据集下载地址 NameClassDimensionTrain SizeTest SizeTruncatedCharacterTrajectories20314221436182 样本介绍 CharacterTr…

InfoGAN详解与实现(采用tensorflow2.x实现)

InfoGAN详解与实现(采用tensorflow2.x实现) InfoGAN原理InfoGAN实现导入必要库生成器鉴别器模型构建模型训练效果展示 InfoGAN原理 最初的GAN能够产生有意义的输出,但是缺点是它的属性无法控制。例如,无法明确向生成器提出生成女…

InfoGAN论文笔记+源码解析

论文地址:InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets 源码地址:InfoGAN in TensorFlow GAN,Generative Adversarial Network是目前非常火也是非常有潜力的一个发展方向&#…

InfoGAN(基于信息最大化生成对抗网的可解释表征学习)

前言: 这篇博客为阅读论文后的总结与感受,方便日后翻阅、查缺补漏,侵删! 论文: InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets 解决的问题: In…

InfoGAN学习笔记

InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Xi Chen, Yan Duan, Rein Houthooft, John Schulman, Ilya Sutskever, Pieter Abbeel https://arxiv.org/abs/1606.03657 一、从GAN到InfoGAN 1.GAN存在的问题 GAN…

生成对抗网络(十)----------infoGAN

一、infoGAN介绍 infoGAN采用的是无监督式学习的方式并尝试实现可解释特征。原始数据不包含任何标签信息,所有的特征都是通过网络以一种非监督的方式自动学习得到的。使用了信息论的原理,通过最大化输入噪声和观察值之间的互信息来对网络模型进行优化。…

InfoGAN详细介绍及特征解耦图像生成

InfoGAN详细介绍及特征解耦图像生成 一.InfoGAN框架理解特征耦合InfoGANInfoGAN论文实验结果 二.VAE-GAN框架理解VAE-GAN算法步骤 三.BiGAN框架理解四.InfoGAN论文复现使用MNIST数据集复现InfoGAN代码编写初始化判别器初始化生成器初始化分类器训练InfoGAN网络 总结参考文献及博…

InfoGAN介绍

今天给大家分享的是NIPS2016的InfoGAN。这篇paper所要达到的目标就是通过非监督学习得到可分解的特征表示。使用GAN加上最大化生成的图片和输入编码之间的互信息。最大的好处就是可以不需要监督学习,而且不需要大量额外的计算花销就能得到可解释的特征。 通常&#…

10.可视化、可视分析、探索式数据分析

前言:基于人大的《数据科学概论》第十章。主要内容为可视化的定义、可视化的意义、可视化的一般过程、科学可视化与信息可视化、可视化的原则、可视化实例、可视化的挑战和趋势、可视分析技术、探索式数据分析、可视化工具。 一、可视化的定义 可视化是数据的可视表…

国内外大数据可视化分析产品点评

一、KINETICA Kinetica 利用图像处理芯片提供计算支持,允许企业使用机器学习,商业智能分析和可视化技术更快速地分析海量数据; 点评:它的核心技术能力是类MapD的GPU数据库,功能性能较强大,非开源&#xf…

数据分析可视化之模型介绍

一 前言 “数据分析可视化”这条术语实现了成熟的科学可视化领域与较年轻的信息可视化领域的统一。 数据分析可视化:是指将大型数据集中的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。 数据可视化已经提出了许多方法&…

5个最受欢迎的大数据可视化软件

数据可视化的本质是视觉对话,数据可视化将数据分析技术与图形技术结合,清晰有效地将分析结果信息进行解读和传达。 大数据可视化是进行各种大数据分析解决的最重要组成部分之一。 一旦原始数据流被以图像形式表示时,以此做决策就变得容易多了…

软件架构-可视化

软件架构-可视化 当我们在讨论系统时,往往都会说这个系统的架构是什么样的,在你口述的同时,如果能借助某些图表,效果会更好,传统的uml建模比较复杂,目前的软件工程大家更关注效率(这里我不谈敏捷…

48 款数据可视化分析工具大集合

作者:DC君 来源:DataCastle数据城堡 本篇专门推荐48款数据可视化工具,全到你无法想象。 1、Excel 作为一个入门级工具,是快速分析数据的理想工具,也能创建供内部使用的数据图,但是Excel在颜色、线条和样式上…

爬取某小说榜单爬虫及可视化分析

爬取某小说榜单爬虫及可视化分析(仅用于学习) gitee代码链接:https://gitee.com/huang_jia_son/duoduo.git 介绍 GUI界面python爬虫数据清洗与处理pyecharts可视化展示软件架构 (1)通过tkinter制作GUI界面&#xf…

咖啡PowerBI可视化实例

目录 一、导入数据 二、构建指标 1、构架表之间的关系 ​ 2、完善表 3、构建指标 三、可视化 1、整体分析 2、省份业务 3、产品维度 4、地区维度 5、客户维度 6、价格分析 7、利润分析 8、其它分析 一、导入数据 二、构建指标 1、构架表之间的关系 软件会…

CodeScene - 软件质量可视化工具

CodeScene - 软件质量可视化工具 CodeScene https://codescene.com/ https://codescene.io/ The powerful visualization tool using Predictive Analytics to find hidden risks and social patterns in your code. 使用 Predictive Analytics 的功能强大的可视化工具&#x…