From af3b2f13d57eaa2d22321f24ae3f3bf3ed57950d Mon Sep 17 00:00:00 2001 From: xiaoting <31891223+tink2123@users.noreply.github.com> Date: Thu, 11 Apr 2019 17:04:51 +0800 Subject: [PATCH] Add gan for book repo (#695) * add gan for book * fix some typo * Update README.cn.md * modified html * fix some description * optimized the readme * fixed reference --- 09.gan/README.cn.md | 438 +++++++++++++++++++++++++++++++ 09.gan/dc_gan.py | 186 +++++++++++++ 09.gan/image/dcgan_demo.png | Bin 0 -> 167929 bytes 09.gan/image/dcgan_g.png | Bin 0 -> 237355 bytes 09.gan/image/process.png | Bin 0 -> 134100 bytes 09.gan/index.cn.html | 502 ++++++++++++++++++++++++++++++++++++ 09.gan/network.py | 153 +++++++++++ 09.gan/utility.py | 83 ++++++ 8 files changed, 1362 insertions(+) create mode 100644 09.gan/README.cn.md create mode 100644 09.gan/dc_gan.py create mode 100644 09.gan/image/dcgan_demo.png create mode 100644 09.gan/image/dcgan_g.png create mode 100644 09.gan/image/process.png create mode 100644 09.gan/index.cn.html create mode 100644 09.gan/network.py create mode 100644 09.gan/utility.py diff --git a/09.gan/README.cn.md b/09.gan/README.cn.md new file mode 100644 index 0000000..d6ac215 --- /dev/null +++ b/09.gan/README.cn.md @@ -0,0 +1,438 @@ +# 生成对抗网络 + +本教程源代码目录在book/09.gan,初次使用请您参考Book文档使用说明。 + +## 背景介绍 + +生成对抗网络(Generative Adversarial Network \[[1](#参考文献)\],简称GAN)是非监督式学习的一种方法,通过让两个神经网络相互博弈的方式进行学习。该方法最初由 lan·Goodfellow 等人于2014年提出,原论文见 [Generative Adversarial Network](https://arxiv.org/abs/1406.2661)。 + +生成对抗网络由一个生成网络与一个判别网络组成。生成网络从潜在空间(latent space)中随机采样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别网络的输入为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能分辨出来。而生成网络则要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数,其目的是将生成网络生成的样本和真实样本尽可能的区分开\[[2](#参考文献)\] )。 + +生成对抗网络常用于生成以假乱真的图片 \[[3](#参考文献)\] )。此外,该方法还被用于生成视频、三维物体模型等。 + +## 效果展示 + +本教程将 MNIST 数据集输入网络进行训练,经过19轮训练后可以看到,生成的图片已经非常接近真实图片的样子,下图中前8行是真实图片的样子,后8行是网络生成的图像效果: +
+
+图1. GAN 生成手写数字效果
+
+
+图2. GAN 训练过程
+
+
+图3. DCGAN中的生成器(G)
+
jD(Hqw1rJ7SH$o73AXDJTo)H
zDCr@rtEZQ6g@uKs$gV>
P}2oR6XhC8bbGv7n%UkxOf0TM?8dkPrB$Gd3N^_DtTzH$+;%suAr0HVpFBA)*4x
zUxs$gC}Ktqa}wbT0kI0DWC&U-(Hj?Tlt@k&f;%Q~IclJ)i7#~gRnQ073GtxtOuGv#
z36}sm8kEs15Sxh2M&BCu>lFFdIU&icDTKgY+I)?%WkAah?d|u$I;P|MT_Mm@y#X9-
zhh{M}xBM(4Ly4fJ&{0yA0o%b}wEO4JpOFt9FpJ|X^Qt|lc5v29yjt`nVWTxwMSLu;
z{FZgh96!z0`l_m%K|7dazkT~A$hW?tt+RY?px^*xONyQQ6oZ0-o@Hh#$HvAUfxaH%
z=x^6(J*vXLTN|n7Ct^Xc8|E1!SQ?;wMB}@_goPoKs{t*?8n`09&H(RlAlZhTwSm_1
z3@m%JA~z>nxB?`^qATBILyqVf_i-PN9#{9K)#Fi
zuAVPn>QhrB92^~KSy>N#djM)~`wbb6lG8Tk=EN>e?V@JTN3tcxEdf9LV0{rrV?%Y~
ziDtb~5)A{xmVX(S>tpzmt0GPzqwd^yoMYxZ*alN`^8h6B(-`W48;Uq*m_jj3nKV0N
zuzHwgSEjD7H8zI}KF&yD90zJ^*5qJgV`J)iZOdDq{Ev;t4L}XhkR+Uk$m!3a;RSif?$&mF2)SV7GHbb6ignh!2}e)#VQ
z<^`fin1w5ee*v#8;c13b@`VM_YNH-$FF^gKA$bu?HHfmgKR?gb)O0^F>I2%(pa5x@
z8*s-9Wr=
O
zt^Ys%@C)d`cmQ)iqwR6*FOR`EMe5_nb3aO?T5K-KZ%Ea%?6gvzXgF1-BXP%8N#6ze=U*NJl?4TjCT5Y
z+stsdw9!H-)wjt>HCP46hy;Y&o%O{qOhrfM{v)dZ72*d9H-qojFBb^*qja96yDT4D
z4KbVFd=-;kKO0Py(Vi>D9cG2nO7_BF;VOuT5G#ja6c`qeyAN!=Zk_q`H)ziY?+thu
z5`LBlKJoNjoJbIigO}vPkBW`8>FXoSiM{n{6Ru>hldHS{-gJ7JFO4@EM-*hp2fjmz$^%S+M`YKl1e
z5@;cVEQa}tAj|EO#c*g?PUWVvK^FvVZ0^Wj^sdkBXbdKDF#4f&Z+qwrG_7#?dtrEY
zY0;ZS8~g?3l%W{(Q#2=OvO}n?gNU@{i5nxP!Alh4(}pu_4Y&SgJ