Skip to content

Instantly share code, notes, and snippets.

@leechanwoo
Created December 20, 2017 08:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leechanwoo/ace98603722c5874a98a3b1ec488578c to your computer and use it in GitHub Desktop.
Save leechanwoo/ace98603722c5874a98a3b1ec488578c to your computer and use it in GitHub Desktop.
import tensorflow as tf
import numpy as np
tf.reset_default_graph()
x = [[i for i in range(10)] for _ in range(1000)]
z = np.random.randn(1000, 10)
real_data = tf.placeholder(tf.float32, shape=[None, 10])
noise = tf.placeholder(tf.float32, shape=[None, 10])
def generator(z, reuse):
name = 'generator/layer_{}'
layer1 = tf.layers.dense(z, 10, name=name.format(1), reuse=reuse)
layer2 = tf.layers.dense(layer1, 10, name=name.format(2), reuse=reuse)
layer3 = tf.layers.dense(layer2, 10, name=name.format(3), reuse=reuse)
layer4 = tf.layers.dense(layer3, 10, name=name.format(4), reuse=reuse)
out = tf.layers.dense(layer4, 10, name=name.format('out'), reuse=reuse)
return out
def discriminator(x, reuse):
name = 'discriminator/layer_{}'
layer1 = tf.layers.dense(x, 15, name=name.format(1), reuse=reuse)
layer2 = tf.layers.dense(layer1, 15, name=name.format(2), reuse=reuse)
layer3 = tf.layers.dense(layer2, 15, name=name.format(3), reuse=reuse)
layer4 = tf.layers.dense(layer3, 15, name=name.format(4), reuse=reuse)
layer5 = tf.layers.dense(layer4, 15, name=name.format(5), reuse=reuse)
out = tf.layers.dense(layer5, 1, name=name.format('out'), reuse=reuse)
return out
def gan_loss(real_data, fake_data):
real_loss = tf.losses.sigmoid_cross_entropy(tf.ones_like(real_data), real_data)
fake_loss = tf.losses.sigmoid_cross_entropy(tf.zeros_like(fake_data), fake_data)
disc_loss = real_loss + fake_loss
gen_loss = tf.losses.sigmoid_cross_entropy(tf.ones_like(fake_data), fake_data)
return disc_loss, gen_loss
def train(loss, var_list):
optim = tf.train.GradientDescentOptimizer(1e-2)
grad = optim.compute_gradients(loss, var_list)
return optim.apply_gradients(grad)
fake_data = generator(noise, False)
real_logits = discriminator(real_data, False)
fake_logits = discriminator(fake_data, True)
disc_loss, gen_loss = gan_loss(real_logits, fake_logits)
variables = tf.trainable_variables()
gen_vars = [v for v in variables if v.name.startswith('generator')]
disc_vars = [v for v in variables if v.name.startswith('discriminator')]
for v in gen_vars:
print(v)
for v in disc_vars:
print(v)
gen_train_op = train(gen_loss, gen_vars)
disc_train_op = train(disc_loss, disc_vars)
real_prob = tf.reduce_mean(tf.nn.sigmoid(real_logits))
fake_prob = tf.reduce_mean(tf.nn.sigmoid(fake_logits))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
_, _disc_loss, _real_prob, _fake_prob = sess.run(
[disc_train_op, disc_loss, real_prob, fake_prob], feed_dict={real_data: x, noise: z})
_, _gen_loss = sess.run([gen_train_op, gen_loss], feed_dict={noise: z})
if i%100 == 0:
print('step: {}, real prob: {}, fake prob: {}'.format(i, _real_prob, _fake_prob))
result = sess.run(fake_data, feed_dict={noise: z})
for r in result:
print(r)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment