利用GAN生成MNIST-demo

转自:https://github.com/NELSONZHAO/zhihu/blob/master/mnist_gan/gan_mnist.ipynb

本篇代码将使用GAN来学习MNIST数据集的生成,仅仅作为一个demo演示,后面会更新更加复杂的GAN模型

In [2]:
import tensorflow as tf
import numpy as np
import pickle
import matplotlib.pyplot as plt

%matplotlib inline

导入数据

In [3]:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('/Users/Nelson/Desktop/Computer/zhihu/denoise_auto_encoder/MNIST_data/')
Extracting /Users/Nelson/Desktop/Computer/zhihu/denoise_auto_encoder/MNIST_data/train-images-idx3-ubyte.gz
Extracting /Users/Nelson/Desktop/Computer/zhihu/denoise_auto_encoder/MNIST_data/train-labels-idx1-ubyte.gz
Extracting /Users/Nelson/Desktop/Computer/zhihu/denoise_auto_encoder/MNIST_data/t10k-images-idx3-ubyte.gz
Extracting /Users/Nelson/Desktop/Computer/zhihu/denoise_auto_encoder/MNIST_data/t10k-labels-idx1-ubyte.gz
In [4]:
img = mnist.train.images[50]
plt.imshow(img.reshape((28, 28)), cmap='Greys_r')
Out[4]:
<matplotlib.image.AxesImage at 0x11f444668>

构建模型

  • inputs
  • generator
  • descriminator
  • loss && optimizer

Inputs

In [5]:
def get_inputs(real_size, noise_size):
    """
    真实图像tensor与噪声图像tensor
    """
    real_img = tf.placeholder(tf.float32, [None, real_size], name='real_img')
    noise_img = tf.placeholder(tf.float32, [None, noise_size], name='noise_img')
    
    return real_img, noise_img

generator

In [28]:
def get_generator(noise_img, n_units, out_dim, reuse=False, alpha=0.01):
    """
    生成器
    
    noise_img: 生成器的输入
    n_units: 隐层单元个数
    out_dim: 生成器输出tensor的size,这里应该为32*32=784
    alpha: leaky ReLU系数
    """
    with tf.variable_scope("generator", reuse=reuse):
        # hidden layer
        hidden1 = tf.layers.dense(noise_img, n_units)
        # leaky ReLU
        hidden1 = tf.maximum(alpha * hidden1, hidden1)
        # dropout
        hidden1 = tf.layers.dropout(hidden1, rate=0.2)

        # logits & outputs
        logits = tf.layers.dense(hidden1, out_dim)
        outputs = tf.tanh(logits)
        
        return logits, outputs

Discriminator

In [29]:
def get_discriminator(img, n_units, reuse=False, alpha=0.01):
    """
    判别器
    
    n_units: 隐层结点数量
    alpha: Leaky ReLU系数
    """
    
    with tf.variable_scope("discriminator", reuse=reuse):
        # hidden layer
        hidden1 = tf.layers.dense(img, n_units)
        hidden1 = tf.maximum(alpha * hidden1, hidden1)
        
        # logits & outputs
        logits = tf.layers.dense(hidden1, 1)
        outputs = tf.sigmoid(logits)
        
        return logits, outputs

定义参数

In [30]:
# 定义参数
# 真实图像的size
img_size = mnist.train.images[0].shape[0]
# 传入给generator的噪声size
noise_size = 100
# 生成器隐层参数
g_units = 128
# 判别器隐层参数
d_units = 128
# leaky ReLU的参数
alpha = 0.01
# learning_rate
learning_rate = 0.001
# label smoothing
smooth = 0.1

构建网络

In [31]:
tf.reset_default_graph()

real_img, noise_img = get_inputs(img_size, noise_size)

# generator
g_logits, g_outputs = get_generator(noise_img, g_units, img_size)

# discriminator
d_logits_real, d_outputs_real = get_discriminator(real_img, d_units)
d_logits_fake, d_outputs_fake = get_discriminator(g_outputs, d_units, reuse=True)

Loss

这里简单说一下Loss的计算方式,由于我们上面构建了两个神经网络:generator和discriminator,因此需要分别计算loss。

  • discriminator discriminator的目的在于对于给定的真图片,识别为真(1),对于generator生成的图片,识别为假(0),因此它的loss包含了真实图片的loss和生成器图片的loss两部分。

  • generator generator的目的在于让discriminator识别不出它的图片是假的,如果用1代表真,0代表假,那么generator生成的图片经过discriminator后要输出为1,因为generator想要骗过discriminator。

In [32]:
# discriminator的loss
# 识别真实图片
d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real, 
                                                                     labels=tf.ones_like(d_logits_real)) * (1 - smooth))
# 识别生成的图片
d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, 
                                                                     labels=tf.zeros_like(d_logits_fake)))
# 总体loss
d_loss = tf.add(d_loss_real, d_loss_fake)

# generator的loss
g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake,
                                                                labels=tf.ones_like(d_logits_fake)) * (1 - smooth))

Optimizer

由于我们在GAN里面一共训练了两个网络,所以需要分别定义优化函数。

In [33]:
train_vars = tf.trainable_variables()

# generator中的tensor
g_vars = [var for var in train_vars if var.name.startswith("generator")]
# discriminator中的tensor
d_vars = [var for var in train_vars if var.name.startswith("discriminator")]

# optimizer
d_train_opt = tf.train.AdamOptimizer(learning_rate).minimize(d_loss, var_list=d_vars)
g_train_opt = tf.train.AdamOptimizer(learning_rate).minimize(g_loss, var_list=g_vars)

训练

In [34]:
# batch_size
batch_size = 64
# 训练迭代轮数
epochs = 300
# 抽取样本数
n_sample = 25

# 存储测试样例
samples = []
# 存储loss
losses = []
# 保存生成器变量
saver = tf.train.Saver(var_list = g_vars)
# 开始训练
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for e in range(epochs):
        for batch_i in range(mnist.train.num_examples//batch_size):
            batch = mnist.train.next_batch(batch_size)
            
            batch_images = batch[0].reshape((batch_size, 784))
            # 对图像像素进行scale,这是因为tanh输出的结果介于(-1,1),real和fake图片共享discriminator的参数
            batch_images = batch_images*2 - 1
            
            # generator的输入噪声
            batch_noise = np.random.uniform(-1, 1, size=(batch_size, noise_size))
            
            # Run optimizers
            _ = sess.run(d_train_opt, feed_dict={real_img: batch_images, noise_img: batch_noise})
            _ = sess.run(g_train_opt, feed_dict={noise_img: batch_noise})
        
        # 每一轮结束计算loss
        train_loss_d = sess.run(d_loss, 
                                feed_dict = {real_img: batch_images, 
                                             noise_img: batch_noise})
        # real img loss
        train_loss_d_real = sess.run(d_loss_real, 
                                     feed_dict = {real_img: batch_images, 
                                                 noise_img: batch_noise})
        # fake img loss
        train_loss_d_fake = sess.run(d_loss_fake, 
                                    feed_dict = {real_img: batch_images, 
                                                 noise_img: batch_noise})
        # generator loss
        train_loss_g = sess.run(g_loss, 
                                feed_dict = {noise_img: batch_noise})
        
            
        print("Epoch {}/{}...".format(e+1, epochs),
              "Discriminator Loss: {:.4f}(Real: {:.4f} + Fake: {:.4f})...".format(train_loss_d, train_loss_d_real, train_loss_d_fake),
              "Generator Loss: {:.4f}".format(train_loss_g))    
        # 记录各类loss值
        losses.append((train_loss_d, train_loss_d_real, train_loss_d_fake, train_loss_g))
        
        # 抽取样本后期进行观察
        sample_noise = np.random.uniform(-1, 1, size=(n_sample, noise_size))
        gen_samples = sess.run(get_generator(noise_img, g_units, img_size, reuse=True),
                               feed_dict={noise_img: sample_noise})
        samples.append(gen_samples)
        
        # 存储checkpoints
        saver.save(sess, './checkpoints/generator.ckpt')

# 将sample的生成数据记录下来
with open('train_samples.pkl', 'wb') as f:
    pickle.dump(samples, f)
Epoch 1/300... Discriminator Loss: 0.0147(Real: 0.0034 + Fake: 0.0113)... Generator Loss: 4.4756
Epoch 2/300... Discriminator Loss: 0.8369(Real: 0.6440 + Fake: 0.1929)... Generator Loss: 3.4612
Epoch 3/300... Discriminator Loss: 2.4569(Real: 0.4378 + Fake: 2.0190)... Generator Loss: 1.3602
Epoch 4/300... Discriminator Loss: 2.4824(Real: 1.3145 + Fake: 1.1679)... Generator Loss: 1.1058
Epoch 5/300... Discriminator Loss: 1.1215(Real: 0.5974 + Fake: 0.5241)... Generator Loss: 1.4620
Epoch 6/300... Discriminator Loss: 1.3360(Real: 0.4221 + Fake: 0.9139)... Generator Loss: 1.8638
Epoch 7/300... Discriminator Loss: 1.9859(Real: 0.9288 + Fake: 1.0571)... Generator Loss: 0.7663
Epoch 8/300... Discriminator Loss: 1.5311(Real: 0.9538 + Fake: 0.5773)... Generator Loss: 1.1415
Epoch 9/300... Discriminator Loss: 1.3389(Real: 0.7155 + Fake: 0.6235)... Generator Loss: 1.2668
Epoch 10/300... Discriminator Loss: 1.2760(Real: 0.6481 + Fake: 0.6279)... Generator Loss: 1.3282
Epoch 11/300... Discriminator Loss: 0.8972(Real: 0.5581 + Fake: 0.3392)... Generator Loss: 1.4769
Epoch 12/300... Discriminator Loss: 0.6853(Real: 0.3168 + Fake: 0.3685)... Generator Loss: 2.1966
Epoch 13/300... Discriminator Loss: 0.5786(Real: 0.3293 + Fake: 0.2494)... Generator Loss: 2.4398
Epoch 14/300... Discriminator Loss: 0.8380(Real: 0.5881 + Fake: 0.2499)... Generator Loss: 3.6519
Epoch 15/300... Discriminator Loss: 0.6331(Real: 0.4399 + Fake: 0.1932)... Generator Loss: 3.0437
Epoch 16/300... Discriminator Loss: 0.6575(Real: 0.3006 + Fake: 0.3568)... Generator Loss: 1.6023
Epoch 17/300... Discriminator Loss: 0.6805(Real: 0.4399 + Fake: 0.2406)... Generator Loss: 2.5174
Epoch 18/300... Discriminator Loss: 1.0586(Real: 0.5129 + Fake: 0.5457)... Generator Loss: 1.2804
Epoch 19/300... Discriminator Loss: 0.8614(Real: 0.7153 + Fake: 0.1461)... Generator Loss: 3.2152
Epoch 20/300... Discriminator Loss: 1.2375(Real: 0.6200 + Fake: 0.6175)... Generator Loss: 1.1561
Epoch 21/300... Discriminator Loss: 1.3308(Real: 0.4849 + Fake: 0.8459)... Generator Loss: 1.6262
Epoch 22/300... Discriminator Loss: 0.8637(Real: 0.4784 + Fake: 0.3852)... Generator Loss: 1.7631
Epoch 23/300... Discriminator Loss: 0.8955(Real: 0.4214 + Fake: 0.4740)... Generator Loss: 2.0115
Epoch 24/300... Discriminator Loss: 1.3857(Real: 0.7137 + Fake: 0.6721)... Generator Loss: 1.3904
Epoch 25/300... Discriminator Loss: 0.7818(Real: 0.4276 + Fake: 0.3542)... Generator Loss: 1.7709
Epoch 26/300... Discriminator Loss: 1.0178(Real: 0.7770 + Fake: 0.2408)... Generator Loss: 2.3353
Epoch 27/300... Discriminator Loss: 1.1127(Real: 0.6966 + Fake: 0.4161)... Generator Loss: 1.7987
Epoch 28/300... Discriminator Loss: 0.9199(Real: 0.6320 + Fake: 0.2879)... Generator Loss: 2.0870
Epoch 29/300... Discriminator Loss: 0.9889(Real: 0.4128 + Fake: 0.5761)... Generator Loss: 1.2318
Epoch 30/300... Discriminator Loss: 0.9835(Real: 0.6739 + Fake: 0.3096)... Generator Loss: 1.9868
Epoch 31/300... Discriminator Loss: 1.0075(Real: 0.5533 + Fake: 0.4543)... Generator Loss: 1.5374
Epoch 32/300... Discriminator Loss: 0.7927(Real: 0.4214 + Fake: 0.3713)... Generator Loss: 1.7201
Epoch 33/300... Discriminator Loss: 0.5752(Real: 0.2431 + Fake: 0.3321)... Generator Loss: 1.8330
Epoch 34/300... Discriminator Loss: 0.9497(Real: 0.3830 + Fake: 0.5666)... Generator Loss: 1.3846
Epoch 35/300... Discriminator Loss: 1.1898(Real: 0.6794 + Fake: 0.5104)... Generator Loss: 1.3661
Epoch 36/300... Discriminator Loss: 0.8393(Real: 0.5443 + Fake: 0.2950)... Generator Loss: 2.2720
Epoch 37/300... Discriminator Loss: 0.9101(Real: 0.4874 + Fake: 0.4227)... Generator Loss: 1.5690
Epoch 38/300... Discriminator Loss: 0.8703(Real: 0.5639 + Fake: 0.3064)... Generator Loss: 1.9145
Epoch 39/300... Discriminator Loss: 1.0917(Real: 0.7483 + Fake: 0.3434)... Generator Loss: 1.8346
Epoch 40/300... Discriminator Loss: 1.0685(Real: 0.5225 + Fake: 0.5460)... Generator Loss: 1.1778
Epoch 41/300... Discriminator Loss: 0.9846(Real: 0.4480 + Fake: 0.5365)... Generator Loss: 1.4012
Epoch 42/300... Discriminator Loss: 0.6707(Real: 0.3300 + Fake: 0.3406)... Generator Loss: 1.6269
Epoch 43/300... Discriminator Loss: 0.8931(Real: 0.4544 + Fake: 0.4387)... Generator Loss: 1.4853
Epoch 44/300... Discriminator Loss: 0.8483(Real: 0.4995 + Fake: 0.3488)... Generator Loss: 1.7784
Epoch 45/300... Discriminator Loss: 1.0488(Real: 0.4973 + Fake: 0.5515)... Generator Loss: 1.3255
Epoch 46/300... Discriminator Loss: 0.7326(Real: 0.2778 + Fake: 0.4548)... Generator Loss: 1.3374
Epoch 47/300... Discriminator Loss: 0.7314(Real: 0.4215 + Fake: 0.3099)... Generator Loss: 1.8939
Epoch 48/300... Discriminator Loss: 0.8447(Real: 0.4863 + Fake: 0.3584)... Generator Loss: 1.5622
Epoch 49/300... Discriminator Loss: 0.7643(Real: 0.4007 + Fake: 0.3636)... Generator Loss: 1.3912
Epoch 50/300... Discriminator Loss: 1.3260(Real: 1.0035 + Fake: 0.3225)... Generator Loss: 1.8303
Epoch 51/300... Discriminator Loss: 0.9762(Real: 0.5887 + Fake: 0.3876)... Generator Loss: 1.6349
Epoch 52/300... Discriminator Loss: 0.9041(Real: 0.4692 + Fake: 0.4349)... Generator Loss: 1.6441
Epoch 53/300... Discriminator Loss: 1.2420(Real: 0.7834 + Fake: 0.4585)... Generator Loss: 1.3940
Epoch 54/300... Discriminator Loss: 0.8505(Real: 0.5459 + Fake: 0.3046)... Generator Loss: 1.7683
Epoch 55/300... Discriminator Loss: 0.8280(Real: 0.3547 + Fake: 0.4733)... Generator Loss: 1.5544
Epoch 56/300... Discriminator Loss: 1.1979(Real: 0.6791 + Fake: 0.5188)... Generator Loss: 1.3144
Epoch 57/300... Discriminator Loss: 0.9121(Real: 0.4599 + Fake: 0.4522)... Generator Loss: 1.3161
Epoch 58/300... Discriminator Loss: 0.9336(Real: 0.4632 + Fake: 0.4704)... Generator Loss: 1.3045
Epoch 59/300... Discriminator Loss: 0.8480(Real: 0.4361 + Fake: 0.4119)... Generator Loss: 1.5340
Epoch 60/300... Discriminator Loss: 1.0266(Real: 0.5291 + Fake: 0.4974)... Generator Loss: 1.3691
Epoch 61/300... Discriminator Loss: 0.8346(Real: 0.4544 + Fake: 0.3802)... Generator Loss: 1.5114
Epoch 62/300... Discriminator Loss: 1.0323(Real: 0.4612 + Fake: 0.5711)... Generator Loss: 1.1582
Epoch 63/300... Discriminator Loss: 0.8509(Real: 0.2894 + Fake: 0.5615)... Generator Loss: 1.1399
Epoch 64/300... Discriminator Loss: 0.9109(Real: 0.2956 + Fake: 0.6153)... Generator Loss: 1.1548
Epoch 65/300... Discriminator Loss: 0.9753(Real: 0.3693 + Fake: 0.6060)... Generator Loss: 1.1795
Epoch 66/300... Discriminator Loss: 0.8657(Real: 0.5278 + Fake: 0.3379)... Generator Loss: 1.7071
Epoch 67/300... Discriminator Loss: 1.0653(Real: 0.5136 + Fake: 0.5517)... Generator Loss: 1.3014
Epoch 68/300... Discriminator Loss: 0.8507(Real: 0.5265 + Fake: 0.3243)... Generator Loss: 1.6583
Epoch 69/300... Discriminator Loss: 0.7503(Real: 0.3371 + Fake: 0.4131)... Generator Loss: 1.5704
Epoch 70/300... Discriminator Loss: 0.7904(Real: 0.4176 + Fake: 0.3727)... Generator Loss: 1.4692
Epoch 71/300... Discriminator Loss: 1.1162(Real: 0.6322 + Fake: 0.4840)... Generator Loss: 1.3120
Epoch 72/300... Discriminator Loss: 0.9021(Real: 0.5795 + Fake: 0.3226)... Generator Loss: 1.6635
Epoch 73/300... Discriminator Loss: 0.9043(Real: 0.5528 + Fake: 0.3515)... Generator Loss: 1.5282
Epoch 74/300... Discriminator Loss: 0.9391(Real: 0.4916 + Fake: 0.4475)... Generator Loss: 1.3946
Epoch 75/300... Discriminator Loss: 0.8306(Real: 0.4794 + Fake: 0.3511)... Generator Loss: 1.6506
Epoch 76/300... Discriminator Loss: 0.7904(Real: 0.3060 + Fake: 0.4844)... Generator Loss: 1.3785
Epoch 77/300... Discriminator Loss: 0.6161(Real: 0.3153 + Fake: 0.3008)... Generator Loss: 1.7631
Epoch 78/300... Discriminator Loss: 0.9961(Real: 0.5445 + Fake: 0.4516)... Generator Loss: 1.4244
Epoch 79/300... Discriminator Loss: 0.8625(Real: 0.5364 + Fake: 0.3261)... Generator Loss: 1.7045
Epoch 80/300... Discriminator Loss: 0.8928(Real: 0.3286 + Fake: 0.5642)... Generator Loss: 1.1575
Epoch 81/300... Discriminator Loss: 1.0176(Real: 0.6541 + Fake: 0.3634)... Generator Loss: 1.6936
Epoch 82/300... Discriminator Loss: 1.0375(Real: 0.5627 + Fake: 0.4748)... Generator Loss: 1.5395
Epoch 83/300... Discriminator Loss: 0.9439(Real: 0.4094 + Fake: 0.5345)... Generator Loss: 1.4580
Epoch 84/300... Discriminator Loss: 0.9203(Real: 0.7385 + Fake: 0.1818)... Generator Loss: 2.1272
Epoch 85/300... Discriminator Loss: 1.0811(Real: 0.6899 + Fake: 0.3912)... Generator Loss: 1.6038
Epoch 86/300... Discriminator Loss: 0.9234(Real: 0.4536 + Fake: 0.4698)... Generator Loss: 1.3710
Epoch 87/300... Discriminator Loss: 0.9945(Real: 0.5712 + Fake: 0.4233)... Generator Loss: 1.4238
Epoch 88/300... Discriminator Loss: 0.7846(Real: 0.4756 + Fake: 0.3089)... Generator Loss: 1.7352
Epoch 89/300... Discriminator Loss: 0.9526(Real: 0.4870 + Fake: 0.4656)... Generator Loss: 1.4887
Epoch 90/300... Discriminator Loss: 0.8098(Real: 0.3959 + Fake: 0.4139)... Generator Loss: 1.5757
Epoch 91/300... Discriminator Loss: 0.9942(Real: 0.6573 + Fake: 0.3369)... Generator Loss: 1.8370
Epoch 92/300... Discriminator Loss: 0.9474(Real: 0.5687 + Fake: 0.3787)... Generator Loss: 1.4353
Epoch 93/300... Discriminator Loss: 0.9888(Real: 0.5436 + Fake: 0.4452)... Generator Loss: 1.3798
Epoch 94/300... Discriminator Loss: 0.7007(Real: 0.4118 + Fake: 0.2888)... Generator Loss: 1.7029
Epoch 95/300... Discriminator Loss: 0.8426(Real: 0.3879 + Fake: 0.4547)... Generator Loss: 1.5108
Epoch 96/300... Discriminator Loss: 0.7522(Real: 0.4859 + Fake: 0.2664)... Generator Loss: 1.7721
Epoch 97/300... Discriminator Loss: 0.8283(Real: 0.4042 + Fake: 0.4241)... Generator Loss: 1.4884
Epoch 98/300... Discriminator Loss: 1.0526(Real: 0.5964 + Fake: 0.4563)... Generator Loss: 1.4419
Epoch 99/300... Discriminator Loss: 0.9079(Real: 0.4496 + Fake: 0.4583)... Generator Loss: 1.3825
Epoch 100/300... Discriminator Loss: 0.8061(Real: 0.4061 + Fake: 0.4000)... Generator Loss: 1.4092
Epoch 101/300... Discriminator Loss: 0.8450(Real: 0.5744 + Fake: 0.2705)... Generator Loss: 1.9265
Epoch 102/300... Discriminator Loss: 1.1218(Real: 0.3641 + Fake: 0.7578)... Generator Loss: 0.9032
Epoch 103/300... Discriminator Loss: 0.9129(Real: 0.5043 + Fake: 0.4086)... Generator Loss: 1.5144
Epoch 104/300... Discriminator Loss: 0.9630(Real: 0.4273 + Fake: 0.5357)... Generator Loss: 1.2290
Epoch 105/300... Discriminator Loss: 0.8951(Real: 0.5567 + Fake: 0.3385)... Generator Loss: 1.6709
Epoch 106/300... Discriminator Loss: 0.8169(Real: 0.4729 + Fake: 0.3439)... Generator Loss: 1.4832
Epoch 107/300... Discriminator Loss: 0.9736(Real: 0.4665 + Fake: 0.5071)... Generator Loss: 1.1462
Epoch 108/300... Discriminator Loss: 1.0189(Real: 0.4600 + Fake: 0.5588)... Generator Loss: 1.3325
Epoch 109/300... Discriminator Loss: 0.9235(Real: 0.5243 + Fake: 0.3992)... Generator Loss: 1.5370
Epoch 110/300... Discriminator Loss: 1.0224(Real: 0.4450 + Fake: 0.5774)... Generator Loss: 1.0703
Epoch 111/300... Discriminator Loss: 1.0100(Real: 0.3560 + Fake: 0.6541)... Generator Loss: 1.0149
Epoch 112/300... Discriminator Loss: 1.1628(Real: 0.6662 + Fake: 0.4966)... Generator Loss: 1.3035
Epoch 113/300... Discriminator Loss: 0.7378(Real: 0.3179 + Fake: 0.4199)... Generator Loss: 1.3908
Epoch 114/300... Discriminator Loss: 1.0237(Real: 0.5013 + Fake: 0.5225)... Generator Loss: 1.2938
Epoch 115/300... Discriminator Loss: 0.9034(Real: 0.5591 + Fake: 0.3444)... Generator Loss: 1.6453
Epoch 116/300... Discriminator Loss: 1.1119(Real: 0.5408 + Fake: 0.5711)... Generator Loss: 1.1376
Epoch 117/300... Discriminator Loss: 0.8655(Real: 0.3684 + Fake: 0.4971)... Generator Loss: 1.1885
Epoch 118/300... Discriminator Loss: 0.7962(Real: 0.3681 + Fake: 0.4281)... Generator Loss: 1.2890
Epoch 119/300... Discriminator Loss: 0.7480(Real: 0.3682 + Fake: 0.3798)... Generator Loss: 1.4283
Epoch 120/300... Discriminator Loss: 0.7997(Real: 0.3735 + Fake: 0.4261)... Generator Loss: 1.5357
Epoch 121/300... Discriminator Loss: 1.0107(Real: 0.4194 + Fake: 0.5914)... Generator Loss: 1.1734
Epoch 122/300... Discriminator Loss: 0.8666(Real: 0.5011 + Fake: 0.3655)... Generator Loss: 1.5522
Epoch 123/300... Discriminator Loss: 0.7934(Real: 0.5092 + Fake: 0.2842)... Generator Loss: 1.7277
Epoch 124/300... Discriminator Loss: 0.7828(Real: 0.4212 + Fake: 0.3616)... Generator Loss: 1.5717
Epoch 125/300... Discriminator Loss: 0.9791(Real: 0.4210 + Fake: 0.5581)... Generator Loss: 1.1748
Epoch 126/300... Discriminator Loss: 0.9125(Real: 0.5014 + Fake: 0.4111)... Generator Loss: 1.3949
Epoch 127/300... Discriminator Loss: 0.8126(Real: 0.4666 + Fake: 0.3459)... Generator Loss: 1.7280
Epoch 128/300... Discriminator Loss: 1.0689(Real: 0.5243 + Fake: 0.5445)... Generator Loss: 1.1941
Epoch 129/300... Discriminator Loss: 1.1615(Real: 0.6485 + Fake: 0.5130)... Generator Loss: 1.3602
Epoch 130/300... Discriminator Loss: 0.9057(Real: 0.4965 + Fake: 0.4092)... Generator Loss: 1.4819
Epoch 131/300... Discriminator Loss: 0.8213(Real: 0.4858 + Fake: 0.3355)... Generator Loss: 1.7211
Epoch 132/300... Discriminator Loss: 1.0234(Real: 0.5754 + Fake: 0.4480)... Generator Loss: 1.2585
Epoch 133/300... Discriminator Loss: 0.8209(Real: 0.3793 + Fake: 0.4416)... Generator Loss: 1.4212
Epoch 134/300... Discriminator Loss: 0.6893(Real: 0.3626 + Fake: 0.3267)... Generator Loss: 1.6297
Epoch 135/300... Discriminator Loss: 0.9245(Real: 0.6849 + Fake: 0.2396)... Generator Loss: 2.0108
Epoch 136/300... Discriminator Loss: 0.6725(Real: 0.3482 + Fake: 0.3244)... Generator Loss: 1.7042
Epoch 137/300... Discriminator Loss: 0.8655(Real: 0.4145 + Fake: 0.4510)... Generator Loss: 1.4157
Epoch 138/300... Discriminator Loss: 0.8901(Real: 0.5177 + Fake: 0.3724)... Generator Loss: 1.6711
Epoch 139/300... Discriminator Loss: 1.0480(Real: 0.5797 + Fake: 0.4682)... Generator Loss: 1.3443
Epoch 140/300... Discriminator Loss: 0.8944(Real: 0.4700 + Fake: 0.4244)... Generator Loss: 1.5379
Epoch 141/300... Discriminator Loss: 0.9566(Real: 0.5850 + Fake: 0.3716)... Generator Loss: 1.5527
Epoch 142/300... Discriminator Loss: 0.8663(Real: 0.3367 + Fake: 0.5297)... Generator Loss: 1.3003
Epoch 143/300... Discriminator Loss: 0.8725(Real: 0.5484 + Fake: 0.3241)... Generator Loss: 1.7062
Epoch 144/300... Discriminator Loss: 0.8560(Real: 0.4725 + Fake: 0.3834)... Generator Loss: 1.4547
Epoch 145/300... Discriminator Loss: 1.0793(Real: 0.5283 + Fake: 0.5510)... Generator Loss: 1.2855
Epoch 146/300... Discriminator Loss: 0.9373(Real: 0.3916 + Fake: 0.5457)... Generator Loss: 1.1826
Epoch 147/300... Discriminator Loss: 0.9873(Real: 0.5622 + Fake: 0.4251)... Generator Loss: 1.4878
Epoch 148/300... Discriminator Loss: 0.9424(Real: 0.5569 + Fake: 0.3855)... Generator Loss: 1.5401
Epoch 149/300... Discriminator Loss: 0.8654(Real: 0.3697 + Fake: 0.4957)... Generator Loss: 1.3275
Epoch 150/300... Discriminator Loss: 1.0871(Real: 0.4403 + Fake: 0.6468)... Generator Loss: 1.1926
Epoch 151/300... Discriminator Loss: 0.9018(Real: 0.4799 + Fake: 0.4219)... Generator Loss: 1.3694
Epoch 152/300... Discriminator Loss: 0.9692(Real: 0.4320 + Fake: 0.5372)... Generator Loss: 1.2124
Epoch 153/300... Discriminator Loss: 0.9614(Real: 0.3599 + Fake: 0.6015)... Generator Loss: 1.1001
Epoch 154/300... Discriminator Loss: 1.0982(Real: 0.5265 + Fake: 0.5718)... Generator Loss: 1.1546
Epoch 155/300... Discriminator Loss: 0.8889(Real: 0.5162 + Fake: 0.3727)... Generator Loss: 1.5126
Epoch 156/300... Discriminator Loss: 0.8909(Real: 0.5263 + Fake: 0.3646)... Generator Loss: 1.4998
Epoch 157/300... Discriminator Loss: 0.8749(Real: 0.6209 + Fake: 0.2539)... Generator Loss: 1.8442
Epoch 158/300... Discriminator Loss: 0.7768(Real: 0.3786 + Fake: 0.3982)... Generator Loss: 1.4546
Epoch 159/300... Discriminator Loss: 0.7586(Real: 0.3465 + Fake: 0.4121)... Generator Loss: 1.5931
Epoch 160/300... Discriminator Loss: 0.8351(Real: 0.3710 + Fake: 0.4640)... Generator Loss: 1.2646
Epoch 161/300... Discriminator Loss: 1.0154(Real: 0.6442 + Fake: 0.3712)... Generator Loss: 1.5601
Epoch 162/300... Discriminator Loss: 0.9415(Real: 0.5933 + Fake: 0.3482)... Generator Loss: 1.6519
Epoch 163/300... Discriminator Loss: 0.9618(Real: 0.4528 + Fake: 0.5090)... Generator Loss: 1.2630
Epoch 164/300... Discriminator Loss: 0.9518(Real: 0.2994 + Fake: 0.6525)... Generator Loss: 1.1173
Epoch 165/300... Discriminator Loss: 0.8301(Real: 0.4541 + Fake: 0.3760)... Generator Loss: 1.5573
Epoch 166/300... Discriminator Loss: 0.9466(Real: 0.4519 + Fake: 0.4946)... Generator Loss: 1.4819
Epoch 167/300... Discriminator Loss: 0.8274(Real: 0.3694 + Fake: 0.4580)... Generator Loss: 1.3429
Epoch 168/300... Discriminator Loss: 0.9853(Real: 0.5106 + Fake: 0.4747)... Generator Loss: 1.4209
Epoch 169/300... Discriminator Loss: 0.9618(Real: 0.3689 + Fake: 0.5929)... Generator Loss: 1.2440
Epoch 170/300... Discriminator Loss: 0.9844(Real: 0.5754 + Fake: 0.4090)... Generator Loss: 1.5392
Epoch 171/300... Discriminator Loss: 0.6993(Real: 0.3185 + Fake: 0.3808)... Generator Loss: 1.5545
Epoch 172/300... Discriminator Loss: 0.8414(Real: 0.4936 + Fake: 0.3478)... Generator Loss: 1.6494
Epoch 173/300... Discriminator Loss: 0.9784(Real: 0.4904 + Fake: 0.4880)... Generator Loss: 1.4030
Epoch 174/300... Discriminator Loss: 0.9865(Real: 0.5229 + Fake: 0.4636)... Generator Loss: 1.4455
Epoch 175/300... Discriminator Loss: 0.8637(Real: 0.5582 + Fake: 0.3055)... Generator Loss: 1.5649
Epoch 176/300... Discriminator Loss: 1.0320(Real: 0.6779 + Fake: 0.3541)... Generator Loss: 1.5035
Epoch 177/300... Discriminator Loss: 0.8697(Real: 0.4183 + Fake: 0.4514)... Generator Loss: 1.3782
Epoch 178/300... Discriminator Loss: 0.7710(Real: 0.3223 + Fake: 0.4487)... Generator Loss: 1.3210
Epoch 179/300... Discriminator Loss: 0.8492(Real: 0.5356 + Fake: 0.3136)... Generator Loss: 1.7507
Epoch 180/300... Discriminator Loss: 0.9469(Real: 0.4594 + Fake: 0.4875)... Generator Loss: 1.1836
Epoch 181/300... Discriminator Loss: 0.8575(Real: 0.4496 + Fake: 0.4079)... Generator Loss: 1.4746
Epoch 182/300... Discriminator Loss: 1.0618(Real: 0.4692 + Fake: 0.5926)... Generator Loss: 1.1557
Epoch 183/300... Discriminator Loss: 0.8216(Real: 0.3261 + Fake: 0.4955)... Generator Loss: 1.3422
Epoch 184/300... Discriminator Loss: 0.9537(Real: 0.5345 + Fake: 0.4192)... Generator Loss: 1.5990
Epoch 185/300... Discriminator Loss: 0.8119(Real: 0.4413 + Fake: 0.3706)... Generator Loss: 1.5930
Epoch 186/300... Discriminator Loss: 0.8742(Real: 0.4673 + Fake: 0.4069)... Generator Loss: 1.6491
Epoch 187/300... Discriminator Loss: 0.8450(Real: 0.4831 + Fake: 0.3620)... Generator Loss: 1.5983
Epoch 188/300... Discriminator Loss: 0.9717(Real: 0.6517 + Fake: 0.3200)... Generator Loss: 1.7039
Epoch 189/300... Discriminator Loss: 0.9521(Real: 0.4952 + Fake: 0.4569)... Generator Loss: 1.3804
Epoch 190/300... Discriminator Loss: 0.8205(Real: 0.3443 + Fake: 0.4762)... Generator Loss: 1.3980
Epoch 191/300... Discriminator Loss: 0.8974(Real: 0.4314 + Fake: 0.4661)... Generator Loss: 1.4135
Epoch 192/300... Discriminator Loss: 1.0076(Real: 0.6454 + Fake: 0.3622)... Generator Loss: 1.5326
Epoch 193/300... Discriminator Loss: 0.8138(Real: 0.3430 + Fake: 0.4707)... Generator Loss: 1.4344
Epoch 194/300... Discriminator Loss: 1.1010(Real: 0.7091 + Fake: 0.3919)... Generator Loss: 1.6079
Epoch 195/300... Discriminator Loss: 0.7605(Real: 0.3204 + Fake: 0.4401)... Generator Loss: 1.4803
Epoch 196/300... Discriminator Loss: 0.8153(Real: 0.4793 + Fake: 0.3360)... Generator Loss: 1.7299
Epoch 197/300... Discriminator Loss: 0.9441(Real: 0.4927 + Fake: 0.4514)... Generator Loss: 1.4858
Epoch 198/300... Discriminator Loss: 1.0428(Real: 0.6532 + Fake: 0.3896)... Generator Loss: 1.5493
Epoch 199/300... Discriminator Loss: 0.9011(Real: 0.3400 + Fake: 0.5611)... Generator Loss: 1.2646
Epoch 200/300... Discriminator Loss: 0.9515(Real: 0.4342 + Fake: 0.5173)... Generator Loss: 1.3028
Epoch 201/300... Discriminator Loss: 1.1137(Real: 0.7594 + Fake: 0.3543)... Generator Loss: 1.6397
Epoch 202/300... Discriminator Loss: 0.8197(Real: 0.4410 + Fake: 0.3787)... Generator Loss: 1.4732
Epoch 203/300... Discriminator Loss: 0.7249(Real: 0.2980 + Fake: 0.4269)... Generator Loss: 1.3593
Epoch 204/300... Discriminator Loss: 0.8541(Real: 0.4805 + Fake: 0.3736)... Generator Loss: 1.6595
Epoch 205/300... Discriminator Loss: 0.8331(Real: 0.4146 + Fake: 0.4185)... Generator Loss: 1.4376
Epoch 206/300... Discriminator Loss: 0.9448(Real: 0.4465 + Fake: 0.4983)... Generator Loss: 1.3908
Epoch 207/300... Discriminator Loss: 0.8465(Real: 0.3963 + Fake: 0.4502)... Generator Loss: 1.5042
Epoch 208/300... Discriminator Loss: 0.8851(Real: 0.4690 + Fake: 0.4162)... Generator Loss: 1.4209
Epoch 209/300... Discriminator Loss: 0.7723(Real: 0.4412 + Fake: 0.3311)... Generator Loss: 1.8208
Epoch 210/300... Discriminator Loss: 0.9705(Real: 0.5858 + Fake: 0.3847)... Generator Loss: 1.6971
Epoch 211/300... Discriminator Loss: 0.7765(Real: 0.4012 + Fake: 0.3753)... Generator Loss: 1.5460
Epoch 212/300... Discriminator Loss: 0.8158(Real: 0.3679 + Fake: 0.4479)... Generator Loss: 1.5751
Epoch 213/300... Discriminator Loss: 1.0357(Real: 0.5575 + Fake: 0.4782)... Generator Loss: 1.5222
Epoch 214/300... Discriminator Loss: 0.9486(Real: 0.4693 + Fake: 0.4793)... Generator Loss: 1.4126
Epoch 215/300... Discriminator Loss: 0.9460(Real: 0.5224 + Fake: 0.4236)... Generator Loss: 1.5115
Epoch 216/300... Discriminator Loss: 0.8645(Real: 0.3317 + Fake: 0.5328)... Generator Loss: 1.2960
Epoch 217/300... Discriminator Loss: 0.8437(Real: 0.4500 + Fake: 0.3937)... Generator Loss: 1.6961
Epoch 218/300... Discriminator Loss: 0.7144(Real: 0.3081 + Fake: 0.4063)... Generator Loss: 1.6794
Epoch 219/300... Discriminator Loss: 0.8068(Real: 0.2967 + Fake: 0.5101)... Generator Loss: 1.4437
Epoch 220/300... Discriminator Loss: 0.9286(Real: 0.4495 + Fake: 0.4791)... Generator Loss: 1.4267
Epoch 221/300... Discriminator Loss: 1.0262(Real: 0.5101 + Fake: 0.5161)... Generator Loss: 1.3806
Epoch 222/300... Discriminator Loss: 1.0850(Real: 0.6448 + Fake: 0.4402)... Generator Loss: 1.5120
Epoch 223/300... Discriminator Loss: 0.9445(Real: 0.5839 + Fake: 0.3606)... Generator Loss: 1.7458
Epoch 224/300... Discriminator Loss: 0.8996(Real: 0.4439 + Fake: 0.4558)... Generator Loss: 1.3533
Epoch 225/300... Discriminator Loss: 0.9013(Real: 0.4363 + Fake: 0.4651)... Generator Loss: 1.4166
Epoch 226/300... Discriminator Loss: 0.7510(Real: 0.4131 + Fake: 0.3378)... Generator Loss: 1.8488
Epoch 227/300... Discriminator Loss: 0.8491(Real: 0.3694 + Fake: 0.4797)... Generator Loss: 1.3296
Epoch 228/300... Discriminator Loss: 0.9011(Real: 0.5374 + Fake: 0.3637)... Generator Loss: 1.5708
Epoch 229/300... Discriminator Loss: 0.7550(Real: 0.3954 + Fake: 0.3596)... Generator Loss: 1.4792
Epoch 230/300... Discriminator Loss: 0.8597(Real: 0.5343 + Fake: 0.3254)... Generator Loss: 1.8235
Epoch 231/300... Discriminator Loss: 0.9227(Real: 0.5255 + Fake: 0.3973)... Generator Loss: 1.8356
Epoch 232/300... Discriminator Loss: 0.7922(Real: 0.4016 + Fake: 0.3906)... Generator Loss: 1.5902
Epoch 233/300... Discriminator Loss: 0.8071(Real: 0.4393 + Fake: 0.3678)... Generator Loss: 1.8041
Epoch 234/300... Discriminator Loss: 1.0976(Real: 0.4988 + Fake: 0.5989)... Generator Loss: 1.3628
Epoch 235/300... Discriminator Loss: 0.9364(Real: 0.6410 + Fake: 0.2954)... Generator Loss: 1.8640
Epoch 236/300... Discriminator Loss: 1.0302(Real: 0.3992 + Fake: 0.6309)... Generator Loss: 1.2057
Epoch 237/300... Discriminator Loss: 1.0051(Real: 0.5131 + Fake: 0.4920)... Generator Loss: 1.3722
Epoch 238/300... Discriminator Loss: 0.9131(Real: 0.4921 + Fake: 0.4210)... Generator Loss: 1.5767
Epoch 239/300... Discriminator Loss: 0.7237(Real: 0.3388 + Fake: 0.3849)... Generator Loss: 1.5380
Epoch 240/300... Discriminator Loss: 0.8824(Real: 0.4462 + Fake: 0.4362)... Generator Loss: 1.4088
Epoch 241/300... Discriminator Loss: 1.0159(Real: 0.5189 + Fake: 0.4970)... Generator Loss: 1.4357
Epoch 242/300... Discriminator Loss: 0.8292(Real: 0.3414 + Fake: 0.4878)... Generator Loss: 1.4072
Epoch 243/300... Discriminator Loss: 0.7986(Real: 0.3459 + Fake: 0.4527)... Generator Loss: 1.3561
Epoch 244/300... Discriminator Loss: 0.7868(Real: 0.3709 + Fake: 0.4158)... Generator Loss: 1.4753
Epoch 245/300... Discriminator Loss: 0.8756(Real: 0.3762 + Fake: 0.4994)... Generator Loss: 1.3728
Epoch 246/300... Discriminator Loss: 0.7911(Real: 0.3586 + Fake: 0.4325)... Generator Loss: 1.5808
Epoch 247/300... Discriminator Loss: 0.8963(Real: 0.5438 + Fake: 0.3525)... Generator Loss: 1.5522
Epoch 248/300... Discriminator Loss: 0.8962(Real: 0.5015 + Fake: 0.3947)... Generator Loss: 1.4568
Epoch 249/300... Discriminator Loss: 0.8785(Real: 0.4011 + Fake: 0.4774)... Generator Loss: 1.4458
Epoch 250/300... Discriminator Loss: 0.8779(Real: 0.4671 + Fake: 0.4107)... Generator Loss: 1.4374
Epoch 251/300... Discriminator Loss: 0.6855(Real: 0.2278 + Fake: 0.4577)... Generator Loss: 1.5999
Epoch 252/300... Discriminator Loss: 0.7288(Real: 0.2969 + Fake: 0.4320)... Generator Loss: 1.3145
Epoch 253/300... Discriminator Loss: 0.7708(Real: 0.4156 + Fake: 0.3552)... Generator Loss: 1.6440
Epoch 254/300... Discriminator Loss: 0.9197(Real: 0.4527 + Fake: 0.4670)... Generator Loss: 1.4224
Epoch 255/300... Discriminator Loss: 0.6597(Real: 0.3203 + Fake: 0.3394)... Generator Loss: 1.6832
Epoch 256/300... Discriminator Loss: 0.8803(Real: 0.4743 + Fake: 0.4059)... Generator Loss: 1.6164
Epoch 257/300... Discriminator Loss: 0.8283(Real: 0.5917 + Fake: 0.2366)... Generator Loss: 2.0667
Epoch 258/300... Discriminator Loss: 0.6551(Real: 0.3308 + Fake: 0.3243)... Generator Loss: 1.5897
Epoch 259/300... Discriminator Loss: 0.8434(Real: 0.4004 + Fake: 0.4430)... Generator Loss: 1.4550
Epoch 260/300... Discriminator Loss: 0.8509(Real: 0.4681 + Fake: 0.3827)... Generator Loss: 1.6318
Epoch 261/300... Discriminator Loss: 0.7960(Real: 0.3591 + Fake: 0.4369)... Generator Loss: 1.3548
Epoch 262/300... Discriminator Loss: 0.7886(Real: 0.4408 + Fake: 0.3478)... Generator Loss: 1.7824
Epoch 263/300... Discriminator Loss: 0.8493(Real: 0.3982 + Fake: 0.4512)... Generator Loss: 1.3558
Epoch 264/300... Discriminator Loss: 0.7801(Real: 0.5010 + Fake: 0.2791)... Generator Loss: 1.9513
Epoch 265/300... Discriminator Loss: 0.9426(Real: 0.4282 + Fake: 0.5144)... Generator Loss: 1.2997
Epoch 266/300... Discriminator Loss: 0.8832(Real: 0.4302 + Fake: 0.4530)... Generator Loss: 1.6325
Epoch 267/300... Discriminator Loss: 0.8256(Real: 0.4444 + Fake: 0.3812)... Generator Loss: 1.6942
Epoch 268/300... Discriminator Loss: 0.7599(Real: 0.3865 + Fake: 0.3734)... Generator Loss: 1.5100
Epoch 269/300... Discriminator Loss: 0.7075(Real: 0.3521 + Fake: 0.3554)... Generator Loss: 1.7142
Epoch 270/300... Discriminator Loss: 0.8379(Real: 0.4407 + Fake: 0.3972)... Generator Loss: 1.6105
Epoch 271/300... Discriminator Loss: 0.8822(Real: 0.4576 + Fake: 0.4246)... Generator Loss: 1.3422
Epoch 272/300... Discriminator Loss: 0.7067(Real: 0.3747 + Fake: 0.3319)... Generator Loss: 1.7982
Epoch 273/300... Discriminator Loss: 0.9491(Real: 0.3331 + Fake: 0.6160)... Generator Loss: 1.1678
Epoch 274/300... Discriminator Loss: 0.9027(Real: 0.4023 + Fake: 0.5004)... Generator Loss: 1.3071
Epoch 275/300... Discriminator Loss: 1.0177(Real: 0.6045 + Fake: 0.4132)... Generator Loss: 1.5696
Epoch 276/300... Discriminator Loss: 0.7624(Real: 0.3835 + Fake: 0.3789)... Generator Loss: 1.6515
Epoch 277/300... Discriminator Loss: 0.7774(Real: 0.3535 + Fake: 0.4239)... Generator Loss: 1.4340
Epoch 278/300... Discriminator Loss: 0.9851(Real: 0.5067 + Fake: 0.4784)... Generator Loss: 1.6000
Epoch 279/300... Discriminator Loss: 0.7456(Real: 0.3019 + Fake: 0.4436)... Generator Loss: 1.5510
Epoch 280/300... Discriminator Loss: 0.8346(Real: 0.4733 + Fake: 0.3613)... Generator Loss: 1.6919
Epoch 281/300... Discriminator Loss: 0.9050(Real: 0.3088 + Fake: 0.5962)... Generator Loss: 1.1954
Epoch 282/300... Discriminator Loss: 0.8435(Real: 0.5000 + Fake: 0.3436)... Generator Loss: 1.5943
Epoch 283/300... Discriminator Loss: 0.8737(Real: 0.4931 + Fake: 0.3806)... Generator Loss: 1.6157
Epoch 284/300... Discriminator Loss: 0.9461(Real: 0.3680 + Fake: 0.5780)... Generator Loss: 1.1609
Epoch 285/300... Discriminator Loss: 0.8329(Real: 0.3817 + Fake: 0.4511)... Generator Loss: 1.4198
Epoch 286/300... Discriminator Loss: 0.9539(Real: 0.4490 + Fake: 0.5049)... Generator Loss: 1.5694
Epoch 287/300... Discriminator Loss: 0.9675(Real: 0.6881 + Fake: 0.2794)... Generator Loss: 1.9272
Epoch 288/300... Discriminator Loss: 0.8724(Real: 0.3608 + Fake: 0.5116)... Generator Loss: 1.3552
Epoch 289/300... Discriminator Loss: 0.9169(Real: 0.5468 + Fake: 0.3701)... Generator Loss: 1.6312
Epoch 290/300... Discriminator Loss: 0.9644(Real: 0.4654 + Fake: 0.4990)... Generator Loss: 1.4408
Epoch 291/300... Discriminator Loss: 0.7831(Real: 0.4403 + Fake: 0.3429)... Generator Loss: 1.7656
Epoch 292/300... Discriminator Loss: 0.8432(Real: 0.5023 + Fake: 0.3409)... Generator Loss: 1.7476
Epoch 293/300... Discriminator Loss: 0.9190(Real: 0.4037 + Fake: 0.5152)... Generator Loss: 1.5031
Epoch 294/300... Discriminator Loss: 0.9388(Real: 0.5509 + Fake: 0.3879)... Generator Loss: 1.6939
Epoch 295/300... Discriminator Loss: 0.9798(Real: 0.5885 + Fake: 0.3913)... Generator Loss: 1.6279
Epoch 296/300... Discriminator Loss: 0.7808(Real: 0.4825 + Fake: 0.2983)... Generator Loss: 1.7855
Epoch 297/300... Discriminator Loss: 0.7744(Real: 0.3379 + Fake: 0.4365)... Generator Loss: 1.7722
Epoch 298/300... Discriminator Loss: 0.8559(Real: 0.4442 + Fake: 0.4118)... Generator Loss: 1.5235
Epoch 299/300... Discriminator Loss: 0.8517(Real: 0.2599 + Fake: 0.5918)... Generator Loss: 1.3087
Epoch 300/300... Discriminator Loss: 1.0915(Real: 0.5660 + Fake: 0.5255)... Generator Loss: 1.4077

绘制loss曲线

In [38]:
fig, ax = plt.subplots(figsize=(20,7))
losses = np.array(losses)
plt.plot(losses.T[0], label='Discriminator Total Loss')
plt.plot(losses.T[1], label='Discriminator Real Loss')
plt.plot(losses.T[2], label='Discriminator Fake Loss')
plt.plot(losses.T[3], label='Generator')
plt.title("Training Losses")
plt.legend()
Out[38]:
<matplotlib.legend.Legend at 0x1172488d0>

显示图像

In [62]:
# Load samples from generator taken while training
with open('train_samples.pkl', 'rb') as f:
    samples = pickle.load(f)
In [61]:
def view_samples(epoch, samples):
    """
    epoch代表第几次迭代的图像
    samples为我们的采样结果
    """
    fig, axes = plt.subplots(figsize=(7,7), nrows=5, ncols=5, sharey=True, sharex=True)
    for ax, img in zip(axes.flatten(), samples[epoch][1]): # 这里samples[epoch][1]代表生成的图像结果,而[0]代表对应的logits
        ax.xaxis.set_visible(False)
        ax.yaxis.set_visible(False)
        im = ax.imshow(img.reshape((28,28)), cmap='Greys_r')
    
    return fig, axes
In [63]:
_ = view_samples(-1, samples) # 显示最后一轮的outputs

显示整个生成过程图片

In [159]:
# 指定要查看的轮次
epoch_idx = [0, 5, 10, 20, 40, 60, 80, 100, 150, 250] # 一共300轮,不要越界
show_imgs = []
for i in epoch_idx:
    show_imgs.append(samples[i][1])
In [162]:
# 指定图片形状
rows, cols = 10, 25
fig, axes = plt.subplots(figsize=(30,12), nrows=rows, ncols=cols, sharex=True, sharey=True)

idx = range(0, epochs, int(epochs/rows))

for sample, ax_row in zip(show_imgs, axes):
    for img, ax in zip(sample[::int(len(sample)/cols)], ax_row):
        ax.imshow(img.reshape((28,28)), cmap='Greys_r')
        ax.xaxis.set_visible(False)
        ax.yaxis.set_visible(False)

生成新的图片

In [169]:
# 加载我们的生成器变量
saver = tf.train.Saver(var_list=g_vars)
with tf.Session() as sess:
    saver.restore(sess, tf.train.latest_checkpoint('checkpoints'))
    sample_noise = np.random.uniform(-1, 1, size=(25, noise_size))
    gen_samples = sess.run(get_generator(noise_img, g_units, img_size, reuse=True),
                           feed_dict={noise_img: sample_noise})
In [170]:
_ = view_samples(0, [gen_samples])
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值