推荐的几个开源实现

  1. znxlwm 使用InfoGAN的结构,卷积反卷积
  2. eriklindernoren 把mnist转成1维,label用了embedding
  3. wiseodd 直接从tensorflow代码转换过来的,数据集居然还用tf的数据集。。
  4. Yangyangii 转1维向量,全连接
  5. FangYang970206 提供了多标签作为条件的实现思路
  6. 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()

一些坑

  1. 计算D和G的loss时最好分别用不同的随机噪声,否则有可能训练过程不会收敛,而且结果差
  2. 注意,训练的时候随机噪声的分布应该要保持和测试时的分布一致,不要一个用均匀分布,一个用正态分布

初步结果

哈哈哈看到终于训练出来像样的数字,还是有点小成就的

pytorch conditional GAN 调试笔记的更多相关文章

  1. 论文笔记: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 ...

  2. Tomcat调试笔记

    调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是 ...

  3. JavaScript特效(调试笔记)

    JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...

  4. USB wifi调试笔记

    本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...

  5. AI Conditional GAN

    Conditional GAN 参考链接: https://arxiv.org/pdf/1611.07004v1.pdf

  6. ida动态调试笔记

    ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...

  7. modbus-poll和modbus-slave工具的学习使用——modbus协议功能码3的解析(及欧姆龙温控器调试笔记)

    最近的项目中使用到了欧姆龙的温控器,里面有很多的通信方式,我们使用的常见的modbus——RTU方式,其他方式我们不使用,其中通信手册上面有很多通信的实例,欧姆龙modbus还区分4字节模式和2字节模 ...

  8. pytorch训练GAN时的detach()

    我最近在学使用Pytorch写GAN代码,发现有些代码在训练部分细节有略微不同,其中有的人用到了detach()函数截断梯度流,有的人没用detch(),取而代之的是在损失函数在反向传播过程中将bac ...

  9. Jittor实现Conditional GAN

    Jittor实现Conditional GAN Generative Adversarial Nets(GAN)提出了一种新的方法来训练生成模型.然而,GAN对于要生成的图片缺少控制.Conditio ...

随机推荐

  1. Codeforces Round #321 (Div. 2) C Kefa and Park(深搜)

    dfs一遍,维护当前连续遇到的喵的数量,然后剪枝,每个统计孩子数量判断是不是叶子结点. #include<bits/stdc++.h> using namespace std; ; int ...

  2. UVA11019 Matrix Matcher (AC自动机)

    二维的矩阵匹配,把模式矩阵按列拆开构造AC自动机,记录行号(为了缩点判断). 把T矩阵按行匹配,一旦匹配成功,在假想的子矩阵左上角位置加一.最后统计总数. 因为所有模式串长度一样,不用维护last数组 ...

  3. 2018.2.27 JavaScript数组方法应用

    JavaScript数组方法应用 1.找出元素item在给定数组arr中的位置 function indexOf(arr,item){ return arr.indexOf(item); } func ...

  4. PAT (Basic Level) Practise (中文)- 1018. 锤子剪刀布 (20)

    http://www.patest.cn/contests/pat-b-practise/1018 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统 ...

  5. 01_2_Servlet简介

    01_2_Servlet简介 1. Servlet简介 Servlet是服务器小应用程序 用来完成B/S架构下,客户端请求的响应处理 平台独立,性能优良,能以线程方式运行 Servlet API为Se ...

  6. Object-C知识点 (六) 开发中的技巧

    本文主要介绍开发中的一些实用技巧 #pragma mark - 代码控制Home按键 [[UIApplication sharedApplication] performSelector:@selec ...

  7. Spring Security 与 OAuth2(介绍)

    https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 OAuth2(介绍) 林塬 2018.01.23 11:14* 字数 3097 阅读 ...

  8. java解析多层嵌套json字符串

    java分别解析下面两个json字符串 package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjso ...

  9. 解决mysql出现的问题#1055 - Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column this i

    最近在学flask, 在访问主页时,一直出现1055错误,在网上找的解决方法是删除ONLY_FULL_GROUP_BY,当时是删除了,但是退出在进行select @@sql_mode时,仍出现ONLY ...

  10. C#基础-循环语句

    while语句 int i = 1,sum=0; while (i <= 100) { sum += i; i++; } Console.WriteLine(sum); do···while语句 ...