pytorch conditional GAN 调试笔记
推荐的几个开源实现
- znxlwm 使用InfoGAN的结构,卷积反卷积
 - eriklindernoren 把mnist转成1维,label用了embedding
 - wiseodd 直接从tensorflow代码转换过来的,数据集居然还用tf的数据集。。
 - Yangyangii 转1维向量,全连接
 - FangYang970206 提供了多标签作为条件的实现思路
 - znxlwm 专门针对MNIST数据集的一个实现方法,转1维,比较接近原paper的实现方法
 
训练过程
- 简述
 
    # z - 随机噪声
    # X - 输入数据
    # c - 输入的label
    # ===== 训练判别器D =====
    # 真数据输入到D中
    D_real = D(X, c)
    # 真数据D的判断结果应尽可能接近1
    D_loss_real = nn.binary_cross_entropy(D_real, ones_label)   
    # 生成随机噪声
    z = torch.rand((batch_size, self.z_dim))
    # G生成的伪数据,这一步的c可以用已知的,也可以重新随机生成一些label,但总之这些c所生成的数据都是伪的
    G_sample = G(z, c)
    # 伪数据输入到D中
    D_fake = D(G_sample , c)
    # 伪数据D的判断结果应尽可能接近0
    D_loss_fake = nn.binary_cross_entropy(D_fake, zeros_label)     
    # D的loss定义为上面两部分之和,即真数据要尽可能接近1,伪数据要尽可能接近0
    D_loss = D_loss_real + D_loss_fake 
    # 更新D的参数
    D_loss.backward()
    D_solver.step()
    # 在训练G之前把梯度清零,也可以不这么做
    reset_grad()
    # ===== 训练生成器G =====
    # 这里可以选择,有的实现是直接用上面的z
    z = Variable(torch.randn(mb_size, Z_dim))
    # 这里可以选择用已知的c,或者重新采样
    c = 重新随机一些label
    # 用G生成伪数据
    G_sample = G(z, c)
    # 伪数据输入到D中
    D_fake = D(G_sample, c)
    # 此时计算的是G的Loss,伪数据D的判断结果应尽可能接近1,因为G要试图骗过D
    G_loss = nn.binary_cross_entropy(D_fake, ones_label)  
    # 更新G的参数
    G_loss.backward()
    G_solver.step()
一些坑
- 计算D和G的loss时最好分别用不同的随机噪声,否则有可能训练过程不会收敛,而且结果差
 - 注意,训练的时候随机噪声的分布应该要保持和测试时的分布一致,不要一个用均匀分布,一个用正态分布
 
初步结果
哈哈哈看到终于训练出来像样的数字,还是有点小成就的

pytorch conditional GAN 调试笔记的更多相关文章
- 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN
		
论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...
 - Tomcat调试笔记
		
调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是 ...
 - JavaScript特效(调试笔记)
		
JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...
 - USB wifi调试笔记
		
本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...
 - AI Conditional GAN
		
Conditional GAN 参考链接: https://arxiv.org/pdf/1611.07004v1.pdf
 - ida动态调试笔记
		
ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...
 - modbus-poll和modbus-slave工具的学习使用——modbus协议功能码3的解析(及欧姆龙温控器调试笔记)
		
最近的项目中使用到了欧姆龙的温控器,里面有很多的通信方式,我们使用的常见的modbus——RTU方式,其他方式我们不使用,其中通信手册上面有很多通信的实例,欧姆龙modbus还区分4字节模式和2字节模 ...
 - pytorch训练GAN时的detach()
		
我最近在学使用Pytorch写GAN代码,发现有些代码在训练部分细节有略微不同,其中有的人用到了detach()函数截断梯度流,有的人没用detch(),取而代之的是在损失函数在反向传播过程中将bac ...
 - Jittor实现Conditional GAN
		
Jittor实现Conditional GAN Generative Adversarial Nets(GAN)提出了一种新的方法来训练生成模型.然而,GAN对于要生成的图片缺少控制.Conditio ...
 
随机推荐
- ansys-表格
			
转自http://blog.sina.com.cn/s/blog_833dee820102xwb3.html ANSYS中表格数组的定义及使用举例 ANSYS中会有许多的参数数据,这些参数的形成后要放 ...
 - Codeforces Round #319 (Div. 2)  C  Vasya and Petya's Game (数论)
			
因为所有整数都能被唯一分解,p1^a1*p2^a2*...*pi^ai,而一次询问的数可以分解为p1^a1k*p2^a2k*...*pi^aik,这次询问会把所有a1>=a1k &&am ...
 - duboo 配置文件
			
官方文档 http://dubbo.apache.org/en-us/docs/user/quick-start.html 自己的 <?xml version="1.0" e ...
 - QT 调试输出格式
			
Qt调试输出格式: 1,qDebug() << qPrintable(firstNode.nodeName()) << qPrintable(firstNode.nodeVal ...
 - IDE spec for registry settings
			
IDE spec for registry settings Advanced customization of Visual Assist is possible with registry set ...
 - appium---命令行启动appium
			
在客户端的appium长时间运行的时候,出产生一些数据.日志有可能会对appium的内存有所增长,严重的会使appium产生崩溃,这个时候就推荐使用通过cmd进行运行appium, 安装前提需要安装N ...
 - C++容器类-vector
			
vecto之简单应用: #include<vector> #include<iostream> using namespace std; int main() { vector ...
 - jvm | 基于栈的解释器执行过程
			
一段简单的算术代码: public class Demo { public static void main(String[] args) { int a = 1; int b = 2; int c ...
 - java基础—GUI编程(一)
			
一.AWT介绍
 - 新手 WordPress主题制作全过程
			
WordPress主题制作全过程(一):基础准备 前言: 我想大多数使用WordPress的朋友都喜欢去尝试新的主题,但是换来换去,总是找不到那么一款适合自己的,让人很郁闷.于是很多人萌生了修改现有主 ...