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 ...
随机推荐
- MySQL基础教程——mysql脚本编写
SQL,结构化查询语言,既是对数据库进行操作的语言,也是数据库脚本文件的扩展名. 要求:新建一个名为 library 的数据库,包含 book.reader 两张表,根据自己的理解安排表的内容并插入数 ...
- python_86_shutil模块
#高级的文件.文件夹.压缩包.处理模块 import shutil f1=open('sys模块.py','r',encoding='utf-8') f2=open('copy1.py','w',en ...
- eclipse报错GC overhead limit exceed,卡顿
在使用Eclipse的Build Project功能时,提示以下错误: An internal error occurred during: “Build Project”. GC overhead ...
- 【线段树合并】bzoj3545: [ONTAK2010]Peaks
1A还行 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问, ...
- python 监控日志
#需求: #1.每分钟监控服务器日志,ip请求超过200次的,加入黑名单 #1.读文件,获取到每行的内容 open readlines # 178.210.90.90 - - [04/Jun/2017 ...
- destoon 自定义session丢失
destoon 在使用session之前 应该实例化 $session = new dsession(); destoon通过配置文件加载了不同session存储方式.如果你使用session的页面 ...
- 【js】input 焦点到内容的最后
//引用部分应支持jQuery function find_focus(obj){ var curr = jQuery(obj); var val = curr.val(); c ...
- python多进程并发进程池Pool
简介: python中的多进程主要使用到 multiprocessing 这个库.低版本python这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级 ...
- redis集群监控之Redis-monitor部
为了对以后有可能面临的redis集群监控做准备,这两天在准备这方面的事情,现在将其中的过程记录一下. 首先是“Ronney-Hua”的这篇文章对三中开源监控软件做了对比 文章地址:https://bl ...
- gdb调试时查看内存
x/<n/f/u> <addr> n.f.u是可选的参数,<addr>表示一个内存地址 1) n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地 ...