Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
e21dcc5b
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e21dcc5b
编写于
10月 03, 2017
作者:
Z
zchen0211
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
gan api
上级
71dff503
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
22 addition
and
9 deletion
+22
-9
doc/design/gan_api.md
doc/design/gan_api.md
+22
-9
未找到文件。
doc/design/gan_api.md
浏览文件 @
e21dcc5b
'''
'''
GAN implementation, just a demo.
GAN implementation, just a demo.
'''
'''
```
python
# pd for short, should be more concise.
# pd for short, should be more concise.
from
paddle
.
v2
as
pd
from
paddle
.
v2
as
pd
import
numpy
as
np
import
numpy
as
np
import
logging
import
logging
X
=
pd
.
data
(
pd
.
float_vector
(
784
))
X
=
pd
.
data
(
pd
.
float_vector
(
784
))
```
# Conditional-GAN should be a class.
# Conditional-GAN should be a class.
### Class member function: the initializer.
### Class member function: the initializer.
```
python
class
DCGAN
(
object
):
class
DCGAN
(
object
):
def
__init__
(
self
,
y_dim
=
None
):
def
__init__
(
self
,
y_dim
=
None
):
...
@@ -19,22 +21,26 @@ class DCGAN(object):
...
@@ -19,22 +21,26 @@ class DCGAN(object):
self
.
z_dim
=
z_dim
# input noise dimension
self
.
z_dim
=
z_dim
# input noise dimension
# define parameters of discriminators
# define parameters of discriminators
self
.
D_W0
=
pd
.
Variable
(
shape
=
[
784
,
128
],
data
=
pd
.
gaussian_normal_randomizer
())
self
.
D_b0
=
pd
.
Variable
(
np
.
zeros
(
128
))
# variable also support initialization using a numpy data
self
.
D_W1
=
pd
.
Variable
(
shape
=
[
784
,
128
],
data
=
pd
.
gaussian_normal_randomizer
())
self
.
D_W1
=
pd
.
Variable
(
shape
=
[
784
,
128
],
data
=
pd
.
gaussian_normal_randomizer
())
self
.
D_b1
=
pd
.
Variable
(
np
.
zeros
(
128
))
# variable also support initialization using a numpy data
self
.
D_b1
=
pd
.
Variable
(
np
.
zeros
(
128
))
# variable also support initialization using a numpy data
self
.
D_W2
=
pd
.
Varialble
(
np
.
random
.
rand
(
128
,
1
))
self
.
D_W2
=
pd
.
Varialble
(
np
.
random
.
rand
(
128
,
1
))
self
.
D_b2
=
pd
.
Variable
(
np
.
zeros
(
128
))
self
.
D_b2
=
pd
.
Variable
(
np
.
zeros
(
128
))
self.theta_D = [
D_W1, D_b1, D_W2,
D_b2]
self
.
theta_D
=
[
self
.
D_W0
,
self
.
D_b0
,
self
.
D_W1
,
self
.
D_b1
,
self
.
D_W2
,
self
.
D_b2
]
# define parameters of generators
# define parameters of generators
self
.
G_W0
=
pd
.
Variable
(
shape
=
[
784
,
128
],
data
=
pd
.
gaussian_normal_randomizer
())
self
.
G_b0
=
pd
.
Variable
(
np
.
zeros
(
128
))
# variable also support initialization using a numpy data
self
.
G_W1
=
pd
.
Variable
(
shape
=
[
784
,
128
],
data
=
pd
.
gaussian_normal_randomizer
())
self
.
G_W1
=
pd
.
Variable
(
shape
=
[
784
,
128
],
data
=
pd
.
gaussian_normal_randomizer
())
self
.
G_b1
=
pd
.
Variable
(
np
.
zeros
(
128
))
# variable also support initialization using a numpy data
self
.
G_b1
=
pd
.
Variable
(
np
.
zeros
(
128
))
# variable also support initialization using a numpy data
self
.
G_W2
=
pd
.
Varialble
(
np
.
random
.
rand
(
128
,
1
))
self
.
G_W2
=
pd
.
Varialble
(
np
.
random
.
rand
(
128
,
1
))
self
.
G_b2
=
pd
.
Variable
(
np
.
zeros
(
128
))
self
.
G_b2
=
pd
.
Variable
(
np
.
zeros
(
128
))
self.theta_G = [D_W1, D_b1, D_W2, D_b2]
self
.
theta_G
=
[
self
.
G_W0
,
self
.
G_b0
,
self
.
G_W1
,
self
.
G_b1
,
self
.
G_W2
,
self
.
G_b2
]
```
self.build_model()
### Class member function: Generator Net
### Class member function: Generator Net
```
python
def
generator
(
self
,
z
,
y
=
None
):
def
generator
(
self
,
z
,
y
=
None
):
# Generator Net
# Generator Net
...
@@ -52,8 +58,10 @@ def generator(self, z, y = None):
...
@@ -52,8 +58,10 @@ def generator(self, z, y = None):
G_h2
=
pd
.
deconv
(
G_h1_relu
,
self
.
G_W2
,
self
.
G_b2
))
G_h2
=
pd
.
deconv
(
G_h1_relu
,
self
.
G_W2
,
self
.
G_b2
))
G_im
=
pd
.
tanh
(
G_im
)
G_im
=
pd
.
tanh
(
G_im
)
return
G_im
return
G_im
```
### Class member function: Discriminator Net
### Class member function: Discriminator Net
```
python
def
discriminator
(
self
,
image
):
def
discriminator
(
self
,
image
):
# Discriminator Net
# Discriminator Net
...
@@ -67,8 +75,10 @@ def discriminator(self, image):
...
@@ -67,8 +75,10 @@ def discriminator(self, image):
D_h2
=
pd
.
fc
(
D_h1_relu
,
self
.
D_w2
,
self
.
D_b2
)
D_h2
=
pd
.
fc
(
D_h1_relu
,
self
.
D_w2
,
self
.
D_b2
)
return
D_h2
return
D_h2
```
### Class member function: Build the model
### Class member function: Build the model
```
python
def
build_model
(
self
):
def
build_model
(
self
):
# input data
# input data
...
@@ -97,8 +107,10 @@ def build_model(self):
...
@@ -97,8 +107,10 @@ def build_model(self):
self
.
d_loss
=
self
.
d_loss_real
+
self
.
d_loss_fake
self
.
d_loss
=
self
.
d_loss_real
+
self
.
d_loss_fake
self
.
g_loss
=
pd
.
reduce_mean
(
pd
.
cross_entropy
(
self
.
D_f
,
np
.
ones
(
self
.
batch_szie
))
self
.
g_loss
=
pd
.
reduce_mean
(
pd
.
cross_entropy
(
self
.
D_f
,
np
.
ones
(
self
.
batch_szie
))
```
# Main function for the demo:
# Main function for the demo:
```
python
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
# dcgan
# dcgan
...
@@ -109,7 +121,7 @@ if __name__ == "__main__":
...
@@ -109,7 +121,7 @@ if __name__ == "__main__":
data_X
,
data_y
=
self
.
load_mnist
()
data_X
,
data_y
=
self
.
load_mnist
()
# Two subgraphs required!!!
# Two subgraphs required!!!
d_optim = pd.train.Adam(lr = .001, beta= .1).minimize(self.d_loss)
d_optim
=
pd
.
train
.
Adam
(
lr
=
.
001
,
beta
=
.
1
).
minimize
(
self
.
d_loss
,
)
g_optim
=
pd
.
train
.
Adam
(
lr
=
.
001
,
beta
=
.
1
).
minimize
(
self
.
g_loss
)
g_optim
=
pd
.
train
.
Adam
(
lr
=
.
001
,
beta
=
.
1
).
minimize
(
self
.
g_loss
)
# executor
# executor
...
@@ -125,10 +137,11 @@ if __name__ == "__main__":
...
@@ -125,10 +137,11 @@ if __name__ == "__main__":
batch_z
=
np
.
random
.
uniform
(
-
1.
,
1.
,
[
batch_size
,
z_dim
])
batch_z
=
np
.
random
.
uniform
(
-
1.
,
1.
,
[
batch_size
,
z_dim
])
if
batch_id
%
2
==
0
:
if
batch_id
%
2
==
0
:
sess.
run
(d_optim,
sess
.
eval
(
d_optim
,
feed_dict
=
{
dcgan
.
images
:
batch_im
,
feed_dict
=
{
dcgan
.
images
:
batch_im
,
dcgan
.
y
:
batch_label
,
dcgan
.
y
:
batch_label
,
dcgan
.
z
:
batch_z
})
dcgan
.
z
:
batch_z
})
else
:
else
:
sess.
run
(g_optim,
sess
.
eval
(
g_optim
,
feed_dict
=
{
dcgan
.
z
:
batch_z
})
feed_dict
=
{
dcgan
.
z
:
batch_z
})
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录