DCGAN学习笔记_dimdfz-程序员宅基地

技术标签: 深度学习  DCGAN  

【Paper】:

            http://arxiv.org/abs/1511.06434

【github】:

            https://github.com/Newmu/dcgan_code  (theano)

            https://github.com/carpedm20/DCGAN-tensorflow  (tensorflow)

            https://github.com/jacobgil/keras-dcgan    (keras)

            https://github.com/soumith/dcgan.torch  (torch)


       DCGAN的原理和GAN是一样的,它只是把上述的G和D换成了两个卷积神经网络(CNN)。但不是直接换就可以了,DCGAN对卷积神经网络的结构做了一些改变,以提高样本的质量和收敛的速度,这些改变如下:  

  1. 取消所有pooling层。G网络中使用反卷积(Deconvolutional layer)进行上采样,D网络中用加入stride的卷积代替pooling。( G 中的反卷积实质上是使用转置卷积(transposed convolutional layer)) 

  2. D和G中均使用batch normalization

  3. 去掉FC层,使网络变为全卷积网络

  4. G网络中使用ReLU作为激活函数,最后一层使用tanh,D网络中使用LeakyReLU作为激活函数,最后一层使用softmax

代码学习: 

main.py

FLAGS参数

epoch:训练回合,默认为25
learning_rate:Adam的学习率,默认为0.0002
beta1:Adam的动量项(Momentum term of Adam),默认为0.5
train_size:训练图像的个数,默认为np.inf (numpy中的inf表示一个无限大的正数)

import numpy
x =  numpy.inf
x>9999999999999999999
输出:True

batch_size:批图像的个数,默认为64。后面生成的图片拼在一张图,因此batch_size最好取平方,比如64,36等
input_height:所使用的图像的图像高度(将会被center cropped),默认为108
input_width:所使用的图像的图像宽度(将会被center cropped),如果没有特别指定默认和input_height一样
output_height:所产生的图像的图像高度(将会被center cropped),默认为64
output_width:所产生的图像的图像宽度(将会被center cropped),如果没有特别指定默认和output_height一样
dataset:所用数据集的名称,在文件夹data里面,可以选择celebA,mnist,lsun。也可以自己下载图片,把文件夹放到data文件夹里面。
input_fname_pattern:输入的图片类型,默认为*.jpg
checkpoint_dir:存放checkpoint的目录名,默认为checkpoint
sample_dir:存放生成图片的目录名,默认为samples
train:训练为True,测试为False,默认为False
crop:训练为True,测试为False,默认为False
visualize:可视化为True,不可视化为False,默认为False

model.py

除了上述已经说明的

sample_num:大小和batch_size一样

y_dim:输出通道。训练mnist数据集时,y_dim=10,因为mnist是图片数字,分为10类表示0到9这10个类别。如果不是mnist,则默认为none。

z_dim:噪声z的维度,默认为100

gf_dim:G第一个卷积层的过滤器个数,默认为64

df_dim:D第一个卷积层的过滤器个数,默认为64

gfc_dim:G第一个全连接层的G单元个数,默认为1024

dfc_dim:D第一个全连接层的D单元个数,默认为1024

c_dim:颜色通道,灰度图像设为1,彩色图像设为3,默认为3

其中self.d_bn1, self.d_bn2, g_bn0, g_bn1, g_bn2是batch标准化,见ops.py的batch_norm(object)。

如果是mnist数据集,d_bn3, g_bn3都要batch_norm。

self.data读取数据集。

然后建立模型(build_model)

build_model():

tf.placeholder(dtype, shape=None, name=None)

此函数用于定义过程,在执行的时候再赋具体的值

参数:

    dtype:数据类型。常用的是tf.float32,tf.float64等数值类型

    shape:数据形状。默认是None,就是一维值,也可以多维,比如:[None,3],表示列是3,行不一定

    name:名称。

返回:

    Tensor类型

赋值一般用sess.run(feed_dict = {x:xs, y_:ys}),其中x,y_是用placeholder创建出来的。

inputs的形状为[batch_size, input_height, input_width, c_dim]。

如果crop=True,inputs的形状为[batch_size, output_height, output_width, c_dim]。

输入分为样本输入inputs和抽样输入sample_inputs。

噪声z的形状为[None, z_dim],第一个None是batch的大小。

然后取数据:

self.G = self.generator(self.z)#返回[batch_size, output_height, output_width, c_dim]形状的张量,也就是batch_size张图

self.D, self.D_logits = self.discriminator(inputs)#返回的D为是否是真样本的sigmoid概率,D_logits是未经sigmoid处理

self.sampler = self.sampler(self.z)#相当于测试,经过G网络模型,取样,代码和G很像,没有G训练的过程。

self.D_, self.D_logits_ = self.discriminator(self.G, reuse=True)

#   D是真实数据,D_是假数据

用交叉熵计算损失,共有:d_loss_real、d_loss_fake、g_loss

self.d_loss_real = tf.reduce_mean(

sigmoid_cross_entropy_with_logits(self.D_logits, tf.ones_like(self.D)))

self.d_loss_fake = tf.reduce_mean(

sigmoid_cross_entropy_with_logits(self.D_logits_, tf.zeros_like(self.D_)))

self.g_loss = tf.reduce_mean(

sigmoid_cross_entropy_with_logits(self.D_logits_, tf.ones_like(self.D_)))

tf.ones_like:新建一个与给定tensor大小一致的tensor,其全部元素为1

d_loss_real是真样本输入的损失,要让D_logits接近于1,也就是D识别出真样本为真的

d_loss_fake是假样本输入的损失,要让D_logits_接近于0,D识别出假样本为假

d_loss = d_loss_real + d_loss_fake是D的目标,要最小化这个损失

g_loss:要让D识别假样本为真样本,G的目标是降低这个损失,D是提高这个损失

summary这几步是关于可视化,就不管了

train()

通过Adam优化器最小化d_loss和g_loss。

sample_z为从-1到1均匀分布的数,大小为[sample_num, z_dim]

从路径中读取原始样本sample,大小为[sample_num, output_height, output_width, c_dim]

接下来进行epoch个训练:

将data总数分为batch_idxs次训练,每次训练batch_size个样本。产生的样本为batch_images。

batch_z为训练的噪声,大小为[batch_num, z_dim]

d_optim = tf.train.AdamOptimizer(config.learning_rate, beta1=config.beta1) \

.minimize(self.d_loss, var_list=self.d_vars)

g_optim = tf.train.AdamOptimizer(config.learning_rate, beta1=config.beta1) \

.minimize(self.g_loss, var_list=self.g_vars)

首先输入噪声z和batch_images,通过优化d_optim更新D网络。

然后输入噪声z,优化g_optim来更新G网络。G网络更新两次,以免d_loss为0。这点不同于paper。

这样的训练,每过100个可以生成图片看看效果。

if np.mod(counter, 100) == 1

 

参照:

https://blog.csdn.net/qq_25737169/article/details/78857788  

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39386156/article/details/86527982

智能推荐

Navicat premium12 的下载与破解_navicat premium 12.rar-程序员宅基地

文章浏览阅读1.2k次。若使用Navicat Premium 12.0.29请转至Navicat Premium 12.0.29安装与激活,其实每个小版本更迭变化不大。另外最重要的是,请仔细阅读本文激活部分,总有一些人遇到低级错误。本文介绍Navicat Premium 12.0.18与Navicat Premium 12.0.24的安装、激活与基本使用。博主将两篇博文合并,故Navicat Premium..._navicat premium 12.rar

223. Rectangle Area_数据库创建一个函数rectangle_area,计算长方形的面积。-程序员宅基地

文章浏览阅读286次。(1)模拟相交;(2)不要遗漏重叠的情况。int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int areaOfA = (C - A) * (D - B); int areaOfB = (G - E) * (H - F); ..._数据库创建一个函数rectangle_area,计算长方形的面积。

安装软件提示计算机管理员权限,安装需要管理员权限怎么办 设置安装软件需要管理员权限的方法教程...-程序员宅基地

文章浏览阅读1.9w次。在使用笔记本电脑的时候,经常会在安装软件或者对文件进行操作时,系统会提示“需要管理员权限”,这会让我们感觉到很烦。明明已经使用了管理员账户登录了,那要怎么解决这个管理员权限的问题。今天小编给大家带来了设置安装软件需要管理员权限的解决方法,感兴趣的一起往下看看吧。怎么设置安装软件需要管理员权限右键点击开始按钮,在弹出菜单中选择运行菜单项在打开的运行窗口中,输入命令gpedit.msc,然后点击确定按..._您需要具备管理员权限才能为此解释器安装软件包,不妨改为按项目

【python模块】 伪数据生产者:faker模块_python faker.word-程序员宅基地

文章浏览阅读826次,点赞3次,收藏13次。faker模块主要是用来创建伪数据,无需手动生成或者手写随机数来生成数据,可以利用faker快速完成伪造大量测试数据的工作。一、虚拟环境内用百度源安装(py_100) PS E:\python_100> pip install Faker -i https://mirror.baidu.com/pypi/simpleLooking in indexes: https://mirror.baidu.com/pypi/simpleCollecting Faker Downloading htt_python faker.word

pythonswapcase_Python swapcase()-字符串大小写翻转函数-程序员宅基地

文章浏览阅读910次,点赞2次,收藏2次。Python中 swapcase()函数的作用是把一个字符串中的字母大小写形式进行翻转。即该函数会把字符串中原来所有的大写形式的字母字符变成小写形式,而所有的小写形式的字母字符变成大写形式,并返回一个新的字符串。该函数不会影响原字符串的内容和形式。一、swapcase()函数的语法格式str.swapcase()str:str是给定的要进行大小写翻转的字符串或字符串变量。参数:该函数没有参数返回值..._swapcase函数python

[bzoj2502]清理雪道 最小流_bzoj2502清理雪道-程序员宅基地

文章浏览阅读251次。劳动最大的益处还在于道德和精神上的发展。这种精神发展是由和谐的劳动产生的,它应当构成无产阶级社会公民区别于资产阶级社会公民的那种人的特质。_bzoj2502清理雪道

随便推点

Ubuntu Git的安装与使用_bionic安装git-程序员宅基地

文章浏览阅读195次。First,确定你的系统中是否有git,简单通过git命令查看$ git没有git的话,系统会给出提示。如果没有git,通过在命令行输入 sudo apt-get install git 命令安装git。$ sudo apt-get install git安装后,配置git$ git config --global user.name "your name"$ gi..._bionic安装git

安装jenkins采坑合集_"jenkins_user=\"jenkins"-程序员宅基地

文章浏览阅读813次。安装jenkins采坑合集不晓得是运气差还是运气好,别人安装jenkins那是手到擒来,毫不费力,到我这就是凡是有坑的地方,我都准确踩了,不得佩服啊,当浮一大白。为了其他伙伴,特别是才接触jenkins的不再踩坑,我九特地的把这些坑给掀开,避免大家再去踩。当然,有些问题的解决,我也是看了其他博主的解决方案,是站在了巨人的肩膀上,才顺利的解决了这些问题,我只是搬运工和集成工,谢谢其他贡献了解决方案的伙伴,唠叨完了,进入正题。一、安装环境操作系统: CentOS Linux release 7.6.181_"jenkins_user=\"jenkins"

计算机软件与理论调剂,2021汕头大学计算机软件与理论081202考研调剂信息-程序员宅基地

文章浏览阅读108次。招生信息学校名称:汕头大学学校省份:广东学校层次:普通院校;学院名称:专业名称:计算机软件与理论专业代码:081202专业类型:None招生类别:None调剂招收人数:专业及招生详情研究方向:(01)人工智能(02)现代网络与信息安全(03)数据科学备注:一、预调剂专业预计我校公共管理硕士暂时不需要调剂,学科教学(语文)、学科教学(英语)、教育管理暂时未确定是否需要调剂,其他专业都接受调剂,调剂名..._汕头大学计算机软件与理论

针对工控领域的电子元器件国产化的讨论内容记录及国产FPGA厂家介绍_紫光同创对标k系列-程序员宅基地

文章浏览阅读1k次。小编跟一些比较厉害的技术大佬们进行了交流,目前工控领域的电子元器件国产化最主要的痛点还是集中在FPGA,本文就FPGA的国产化进行简单介绍。_紫光同创对标k系列

安装BeEF后起首次启动失败的解决记录_beef无法登录-程序员宅基地

文章浏览阅读2.1k次。安装BeEF后启动失败问题安装BeEF后起首次启动失败。解决方法1、# apt --fix-broken install2、启动Apache服务3、启动BeEF问题安装BeEF后起首次启动失败。解决方法在shell中 进行如下操作1、# apt --fix-broken install原本计划的是卸载了重新安装,存在依赖问题删不了,系统提示了这条命令2、启动Apache服务 # service apache2 start3、启动BeEF # bee_beef无法登录

FireDAC 学习 - 4:属性继承_firedac fetch options-程序员宅基地

文章浏览阅读2k次。我们知道,TFdQuery 是通过 TFdConnection 去连接数据库的。而 TFdConnection 连接数据库的参数,可以通过 TFdManager 获得。打开前面的例子程序,在设计期,选择 FdQuery1,看看其属性面板,有一个属性:FetchOptions,这个属性可以拉开,里面有一堆属性可以设置。选中 FdConnection1,查看其属性面板,也有一个 FetchOptions 属性;选中 FdManager1 查看其属性面板,也有一个 FetchOptions 属性。_firedac fetch options

推荐文章

热门文章

相关标签