AIGC:使用生成对抗网络GAN实现MINST手写数字图像生成

news2024/11/24 22:53:53

1 生成对抗网络

生成对抗网络(Generative Adversarial Networks, GAN)是一种非常经典的生成式模型,它受到双人零和博弈的启发,让两个神经网络在相互博弈中进行学习,开创了生成式模型的新范式。从  2017 年以后,GAN相关的论文呈现井喷式增长。GAN 的应用十分广泛,它的应用包括图像合成、图像编辑、风格迁移、图像超分辨率以及图像转换,数据增强等。

1.1 背景

具有开创性工作的生成对抗网络原文由Goodfellow在2014年发表,当时深度学习领域最好的成果有很大一部分都是判别式模型(比如AlexNet),它们使用反向传播和dropout方法,让模型能够拥有一个良好的梯度结构,从而更迅速地收敛到一个较好的状态。而此时的生成式模型相比之下效果却并不是很好。

论文地址:https://arxiv.org/pdf/1406.2661.pdf

生成式模型的任务是:给你一组原始数据 ,请你生成一组新数据 ,使得这两组数据看起来“尽可能的相似”。而这个任务本质上就是让新数据的概率密度 尽可能地接近原始数据的概率密度 ,也就是说我们要学习 这个函数。传统的生成式模型会将 建模出来,并通过梯度下降优化模型中的参数,最终达到逼近的目的。从理论上来这个方法似乎挺好,但是真实情况下的概率分布往往是难以逼近的,在当时也并没有今天这么多的优化技术,所以实际上这个方法效果一般。

因此,本文作者提供了一种新的思路:我们不去直接逼近 ,而是添加一个判别器来判断生成出来的数据“像不像”原始数据,并且轮流训练这个判别器和生成器。假如这两个model最终都能收敛,那么收敛到的位置一定是生成效果“最像”,而判别效果“最准”的位置,我们直接取此时的生成器作为最终答案即可。原文中举了一个例子:生成器就好比一个造假币的团伙,判别器就好比警察,现在我们来看他们互相博弈的过程:

  1. 第一次,假币团伙没有经验,造了很多7块钱一张的假币,拿出去一花就被警察抓了。
  2. 第二次,假币团伙学聪明了,造了很多看起来很正常的假币;警察一开始没有发现,但是在拿到了一张假币样本之后开始研究,发现了假币的一个缺陷(比如没有让盲人摸的手感线),于是向民众推广这种辨别假币的方法,最终假币团伙的假币就花不出去了。
  3. 第三次,假币团伙修复了上面的缺陷,造了很多新假币;警察又开始寻找新的缺陷并推广……
  4. 久而久之,假币团伙造的假币会越来越接近真币,而警察辨别假币的水平也会越来越高。就像生物学上的协同进化一样,这两个团体会在互相博弈中共同进步。

1.2 工作原理

GAN网络能够在不使用标注数据的情况下来进行生成任务的学习。GAN网络由一个生成器和一个判别器组成。生成器从潜在空间随机取样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别器的输入则为真实样本或生成器的输出,其目的是将生成器的输出从真实样本中尽可能分别出来。生成器和判别器相互对抗、不断学习,最终目的使得判别器无法判断生成器的输出结果是否真实。

1.2.1 GAN网络组成

GAN网络由生成器和判别器组成:

  • 生成器。生成器学习如何生成看似合理的数据。对判别器来说,这些生成的实例会变成负面训练样本。
  • 判别器。判别器学习如何通过真实数据的学习来辨别出生成器生成的假数据。判别器将惩罚生成器生成的“不可理(假)”的数据结果。

1.2.2 判别器如何工作

判别器在生成对抗网络中,简单来说是一个分类器。该分类器尝试从生成器生成的假数据中识别真实数据。它可以使用任何适用于数据分类的网络架构。判别器在训练中使用误差反向传播机制来计算损失和更新权重参数。

判别器的训练数据有两处来源,

  • 真实数据。真实数据实例,比如人的照片。在训练中,判别器把这些实例用作正面样本。
  • 虚假数据。生成器生成的实例。在训练中,判别器把这些实例用作负面样本。

上图中两个Sample的框就是这两种输入到判别器的样本。注意,在判别器训练时,生成器不会训练,即在生成器为判别器生成示例数据时,生成器的权重保持恒定。

在训练判别器时,判别器连接到两个损失函数。在训练时,判别器忽略生成器的损失而只使用判别器损失。在训练过程中,

  • 判别器对真实数据和来自生成器生成的假数据进行分类。
  • 判别器的损失函数将惩罚由判别器产生的误判,比如把真实实例判定成假,或者把假的实例判定为真。
  • 判别器通过对来自于判别器网损失函数计算的损失进行反向传播。如上图。

1.2.3 生成器如何工作

生成对抗网络里的生成器,通过接受来自于判别器的反馈来学习如何创建假数据。生成器学习如何让(欺骗)判别器把它的输出归类为真实数据。

相对于判别器的训练,生成器的训练要求生成器与判别器有更加紧密的集成。生成器训练包含:

  • 随机输入。神经网络需要某种形式的输入。通常,为了达到某种目的而输入数据,比如一个输入的实例用来进行分类任务或者预测。但当希望输出一整个全新的数据实例,用什么样输入数据呢?

  • 最常见基础形式里,GAN使用随机噪音作为它的输入。然后,生成器将把随机噪音转换成有意义的输出。通过引入噪音,可以从不同分布形式的不同空间采样,让GAN生成一个宽域的数据

  • 实验结果表明,不同噪音的分布不会产生太大影响。因此,可以选择相对较易的采样来源,比如,均匀分布。方便起见,噪音采样空间的维度一般小于输出空间的维度。注意,有些GAN变种不使用随机输入来形成输出。

  • 生成器网络,负责把随机输入转换成数据实例。

  • 判别器网络,负责把上一步生成的数据归类,判别器输出。

  • 生成器的损失函数,负责惩罚企图蒙骗判别器失败的情况(即生成器生成的假数据,被识别器成功识破)。

1.3 训练

 1.3.1 GAN训练的整个步骤

  • 当训练开始,生成器生成一个些很明显的假数据,判别器能快速地学习如何识别出是不是假数据,

  • 随着训练稳步推进,生成器更接近于能生成蒙骗判别器的输出数据。

  • 最终,如果生成器训练得当,在识别真实和虚假方面,判别器变得差强人意,而且将开始把假数据分类为真实数据,识别的准确率降低。

1.3.2 使用判别器训练生成器

要训练神经网络,通过修改网络的权重来减少误差或者输出的损失。在GAN里却不同,生成器不直接连接到损失函数来试图影响损失,而是把生成的数据输出到判别器,而判别器会制造影响误差损失的输出。当生成器生成的数据被判别器成功识别成仿冒时,生成器损失函数会惩罚生成器。

另外,反向传播里也包含网络的额外处理。反向传播通过计算对输出的影响——更改后的权重在多大程度上影响输,来调整每个权重以使其在正确的方向上。但,生成器权重的影响取决于直接输出到判别器的权重的影响。因此,反向传播始于输出且穿过判别器回流到生成器。

在生成器训练时,不希望判别器更改,就像尝试击中一个移动目标,会让一个本身就麻烦的问题变得更加困难。所以,在训练生成器时使用如下流程,

  • 随机噪音采样作为输入。
  • 生成器从采样的随机噪音采样里生成输出。
  • 让判断器判断上述输出是“真”或“假”,以此作为生成器的输出。
  • 从判别器的分类输出计算误差损失。
  • 穿过判别器和生成器的反向传播,从而获得梯度。
  • 使用梯度来更新生成器的权重。

这个流程是生成器训练的一个迭代。

1.3.3 交替训练

生成器和判别器有不同的训练流程,那么如何才能作为一个整体来训练GAN呢?GAN的训练有交替阶段,

  • 判别器训练一个或者多个迭代。
  • 生成器训练一个或者多个迭代。
  • 不断重复1和2步来训练生成器和判别器。

在判别器训练的阶段,保持生成器不变。因为判别器训练会尝试从仿冒数据里分辨出真实数据,判别器必须学习如何识别生成器的缺陷。这就是经过完整训练的生成器和只能生成随机输出的未训练生成器的不同之处。

类似地,在生成器训练的阶段,保持判别器不变。否则,生成器像尝试击中移动目标一样,可能永远无法收敛。

这种往复训练使得GAN能够处理另外一些棘手的数据生成问题。开始于相对较简单的分类任务问题,从而获得一个解决生成难题的立足点。相反地,如果不能训练一个分类器来识别真实数据和生成数据的区别,甚至无法识别与随机初始化输出的区别,那么GAN的训练根本无法开始。

1.3.4 收敛

随着训练进行,生成器不断改善,相对地,由于不能再轻易地识别出真实数据和假冒数据的,判别器的表现越来越差。当生成器完美地成功生成时,判别器的正确率只有50%。基本上和抛一枚硬币来预测正反一样的概率一样。

这种进度展现了作为整体GAN的一个问题,判别器的反馈随着时间的推移越来越不具有意义。过了这个节点之后,即判别器完全给出了随机反馈,如果继续训练GAN,那么生成器将使用判别器给出的无效反馈进行训练,那么生成器的质量可能会崩塌。

对于GAN来说,收敛往往是一个闪现的点,而不是牢固的、稳态的。

2 基于pytorch实现MINIST手写数字图像识别

# -*- coding: utf-8 -*-
import torch
import matplotlib.pyplot as plt
from torchvision import datasets, transforms
from torch import nn, optim
from torch.nn import functional as F
from tqdm import tqdm
import os

os.chdir(os.path.dirname(__file__))


class Generator(nn.Module):
    def __init__(self, latent_size, hidden_size, output_size):
        super(Generator, self).__init__()
        self.linear = nn.Linear(latent_size, hidden_size)
        self.out = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        x = F.relu(self.linear(x))

        x = torch.sigmoid(self.out(x))
        return x


class Discriminator(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(Discriminator, self).__init__()
        self.linear = nn.Linear(input_size, hidden_size)
        self.out = nn.Linear(hidden_size,1)

    def forward(self, x):
        x = F.relu(self.linear(x))
        x = torch.sigmoid(self.out(x))
        return x


loss_BCE = torch.nn.BCELoss(reduction='sum')


# 压缩后的特征维度
latent_size = 16

# encoder和decoder中间层的维度
hidden_size = 128

# 原始图片和生成图片的维度
input_size = output_size = 28*28


epochs = 100
batch_size = 32
learning_rate = 1e-5
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

modelname = ['gan-G.pth', 'gan-D.pth']
model_g = Generator(latent_size, hidden_size, output_size).to(device)
model_d = Discriminator(input_size, hidden_size).to(device)

optim_g = torch.optim.Adam(model_g.parameters(), lr=learning_rate)
optim_d = torch.optim.Adam(model_d.parameters(), lr=learning_rate)

try:
    model_g.load_state_dict(torch.load(modelname[0]))
    model_d.load_state_dict(torch.load(modelname[1]))
    print('[INFO] Load Model complete')
except:
    pass


train_loader = torch.utils.data.DataLoader(
    datasets.MNIST('./data', train=True, download=True,
                   transform=transforms.ToTensor()),
    batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(
    datasets.MNIST('./data', train=False, transform=transforms.ToTensor()),
    batch_size=batch_size, shuffle=False)


for epoch in range(epochs):
    Gen_loss = 0
    Dis_loss = 0
    for imgs, lbls in tqdm(train_loader, desc=f'[train]epoch:{epoch}'):
        bs = imgs.shape[0]
        T_imgs = imgs.view(bs, input_size).to(device)
        T_lbl = torch.ones(bs, 1).to(device)
        F_lbl = torch.zeros(bs, 1).to(device)

        sample = torch.randn(bs, latent_size).to(device)
        F_imgs = model_g(sample)
        F_Dis = model_d(F_imgs)

        loss_g = loss_BCE(F_Dis, T_lbl)
        loss_g.backward()
        optim_g.step()
        optim_g.zero_grad()

        # 训练判别器, 使用判别器分别判断真实图像和伪造图像
        T_Dis = model_d(T_imgs)
        F_Dis = model_d(F_imgs.detach())

        loss_d_T = loss_BCE(T_Dis, T_lbl)
        loss_d_F = loss_BCE(F_Dis, F_lbl)
        loss_d = loss_d_T + loss_d_F
        loss_d.backward()
        optim_d.step()
        optim_d.zero_grad()

        Gen_loss += loss_g.item()
        Dis_loss += loss_d.item()
    print(f'epoch:{epoch}|Train G Loss:', Gen_loss/len(train_loader.dataset),
          ' Train D Loss:', Dis_loss/len(train_loader.dataset))

    model_g.eval()
    model_d.eval()
    Gen_score = 0
    Dis_score = 0
    for imgs, lbls in tqdm(test_loader, desc=f'[eval]epoch:{epoch}'):
        bs = imgs.shape[0]
        T_imgs = imgs.view(bs, input_size).to(device)
        sample = torch.randn(bs, latent_size).to(device)

        F_imgs = model_g(sample)

        F_Dis = model_d(F_imgs)
        T_Dis = model_d(T_imgs)

        Gen_score += int(sum(F_Dis >= 0.5))
        Dis_score += int(sum(T_Dis >= 0.5)) + int(sum(F_Dis < 0.5))

    print(f'epoch:{epoch}|Test G Score:', Gen_score/len(test_loader.dataset),
          ' Test D Score:', Dis_score/len(test_loader.dataset)/2)

    model_g.train()
    model_d.train()

    model_g.eval()
    noise = torch.randn(1, latent_size).to(device)
    gen_imgs = model_g(noise)
    gen_imgs = gen_imgs[0].view(28, 28)
    plt.matshow(gen_imgs.cpu().detach().numpy())
    plt.show()
    model_g.train()

    torch.save(model_g.state_dict(), modelname[0])
    torch.save(model_d.state_dict(), modelname[1])

sample = torch.randn(1, latent_size).to(device)
gen_imgs = model_g(sample)
gen_imgs = gen_imgs[0].view(28, 28)
plt.matshow(gen_imgs.cpu().detach().numpy())
plt.show()

dataset = datasets.MNIST('./data', train=False, transform=transforms.ToTensor())
index = 0
raw = dataset[index][0].view(28, 28)
plt.matshow(raw.cpu().detach().numpy())
plt.show()
raw = raw.view(1, 28*28)
result = model_d(raw.to(device))
print('该图为真概率为:', result.cpu().detach().numpy())

运行结果展示:

epoch:0|Train G Loss: 0.6875885964711507  Train D Loss: 0.900547916316986
[eval]epoch:0: 100%|██████████| 313/313 [00:01<00:00, 156.80it/s]
epoch:0|Test G Score: 0.508  Test D Score: 0.746
[train]epoch:1: 100%|██████████| 1875/1875 [00:16<00:00, 115.81it/s]
[eval]epoch:1:   0%|          | 0/313 [00:00<?, ?it/s]epoch:1|Train G Loss: 0.6893692766507467  Train D Loss: 0.7974184644699097
[eval]epoch:1: 100%|██████████| 313/313 [00:01<00:00, 207.98it/s]
epoch:1|Test G Score: 0.5464  Test D Score: 0.72665
[train]epoch:2: 100%|██████████| 1875/1875 [00:12<00:00, 146.62it/s]
epoch:2|Train G Loss: 0.673165140692393  Train D Loss: 0.8305254749298095
[eval]epoch:2: 100%|██████████| 313/313 [00:01<00:00, 209.88it/s]
epoch:2|Test G Score: 0.6044  Test D Score: 0.6975
[train]epoch:3: 100%|██████████| 1875/1875 [00:13<00:00, 142.41it/s]
[eval]epoch:3:   0%|          | 0/313 [00:00<?, ?it/s]epoch:3|Train G Loss: 0.655821964041392  Train D Loss: 0.8957085851987203
[eval]epoch:3: 100%|██████████| 313/313 [00:01<00:00, 217.87it/s]
epoch:3|Test G Score: 0.6314  Test D Score: 0.6843
[train]epoch:4: 100%|██████████| 1875/1875 [00:12<00:00, 144.54it/s]
epoch:4|Train G Loss: 0.6303421321868896  Train D Loss: 0.9860619965871175
[eval]epoch:4: 100%|██████████| 313/313 [00:01<00:00, 208.05it/s]
epoch:4|Test G Score: 0.8278  Test D Score: 0.5861
[train]epoch:5: 100%|██████████| 1875/1875 [00:13<00:00, 142.51it/s]
[eval]epoch:5:   0%|          | 0/313 [00:00<?, ?it/s]epoch:5|Train G Loss: 0.618980922015508  Train D Loss: 1.0005566129366557
[eval]epoch:5: 100%|██████████| 313/313 [00:01<00:00, 207.35it/s]
epoch:5|Test G Score: 0.8836  Test D Score: 0.5582
[train]epoch:6: 100%|██████████| 1875/1875 [00:13<00:00, 139.91it/s]
[eval]epoch:6:   0%|          | 0/313 [00:00<?, ?it/s]epoch:6|Train G Loss: 0.6256029644330343  Train D Loss: 0.9548635380109152
[eval]epoch:6: 100%|██████████| 313/313 [00:01<00:00, 178.27it/s]
epoch:6|Test G Score: 0.8472  Test D Score: 0.57635
[train]epoch:7: 100%|██████████| 1875/1875 [00:13<00:00, 138.69it/s]
epoch:7|Train G Loss: 0.6368107126871745  Train D Loss: 0.8985964351971945
[eval]epoch:7: 100%|██████████| 313/313 [00:01<00:00, 219.13it/s]
epoch:7|Test G Score: 0.8338  Test D Score: 0.58305
[train]epoch:8: 100%|██████████| 1875/1875 [00:13<00:00, 136.85it/s]
[eval]epoch:8:   0%|          | 0/313 [00:00<?, ?it/s]epoch:8|Train G Loss: 0.6433719543457032  Train D Loss: 0.8640010238965352
[eval]epoch:8: 100%|██████████| 313/313 [00:01<00:00, 217.03it/s]
epoch:8|Test G Score: 0.8508  Test D Score: 0.5745
[train]epoch:9: 100%|██████████| 1875/1875 [00:13<00:00, 140.35it/s]
epoch:9|Train G Loss: 0.6413426885286967  Train D Loss: 0.856661129951477
[eval]epoch:9: 100%|██████████| 313/313 [00:01<00:00, 205.91it/s]
epoch:9|Test G Score: 0.87  Test D Score: 0.56465
[train]epoch:10: 100%|██████████| 1875/1875 [00:13<00:00, 138.44it/s]
epoch:10|Train G Loss: 0.625159033648173  Train D Loss: 0.8793583973566691
[eval]epoch:10: 100%|██████████| 313/313 [00:01<00:00, 176.33it/s]
epoch:10|Test G Score: 0.8248  Test D Score: 0.58655
[train]epoch:11: 100%|██████████| 1875/1875 [00:14<00:00, 125.72it/s]
[eval]epoch:11:   0%|          | 0/313 [00:00<?, ?it/s]epoch:11|Train G Loss: 0.5767637458483378  Train D Loss: 0.9703869668960571
[eval]epoch:11: 100%|██████████| 313/313 [00:01<00:00, 196.50it/s]
epoch:11|Test G Score: 0.8887  Test D Score: 0.55255
[train]epoch:12: 100%|██████████| 1875/1875 [00:13<00:00, 141.20it/s]
[eval]epoch:12:   0%|          | 0/313 [00:00<?, ?it/s]epoch:12|Train G Loss: 0.5046857475757599  Train D Loss: 1.102966185728709
[eval]epoch:12: 100%|██████████| 313/313 [00:01<00:00, 209.23it/s]
epoch:12|Test G Score: 0.9681  Test D Score: 0.51215
[train]epoch:13: 100%|██████████| 1875/1875 [00:13<00:00, 134.44it/s]
[eval]epoch:13:   0%|          | 0/313 [00:00<?, ?it/s]epoch:13|Train G Loss: 0.45238159114519755  Train D Loss: 1.178836212793986
[eval]epoch:13: 100%|██████████| 313/313 [00:01<00:00, 193.06it/s]
epoch:13|Test G Score: 0.9991  Test D Score: 0.4988
[train]epoch:14: 100%|██████████| 1875/1875 [00:13<00:00, 139.44it/s]
epoch:14|Train G Loss: 0.4352366681098938  Train D Loss: 1.2040739413579304
[eval]epoch:14: 100%|██████████| 313/313 [00:01<00:00, 225.10it/s]
epoch:14|Test G Score: 1.0  Test D Score: 0.49955
[train]epoch:15: 100%|██████████| 1875/1875 [00:13<00:00, 134.89it/s]
[eval]epoch:15:   0%|          | 0/313 [00:00<?, ?it/s]epoch:15|Train G Loss: 0.4290158264954885  Train D Loss: 1.2207831408818564
[eval]epoch:15: 100%|██████████| 313/313 [00:01<00:00, 208.76it/s]
epoch:15|Test G Score: 1.0  Test D Score: 0.5
[train]epoch:16: 100%|██████████| 1875/1875 [00:13<00:00, 140.68it/s]
[eval]epoch:16:   0%|          | 0/313 [00:00<?, ?it/s]epoch:16|Train G Loss: 0.4312060431321462  Train D Loss: 1.2376526662190754
[eval]epoch:16: 100%|██████████| 313/313 [00:01<00:00, 216.49it/s]
epoch:16|Test G Score: 1.0  Test D Score: 0.5
[train]epoch:17: 100%|██████████| 1875/1875 [00:13<00:00, 144.16it/s]
[eval]epoch:17:   0%|          | 0/313 [00:00<?, ?it/s]epoch:17|Train G Loss: 0.44652245319684347  Train D Loss: 1.2268573774973552
[eval]epoch:17: 100%|██████████| 313/313 [00:01<00:00, 219.70it/s]
epoch:17|Test G Score: 1.0  Test D Score: 0.5
[train]epoch:18: 100%|██████████| 1875/1875 [00:13<00:00, 141.00it/s]
[eval]epoch:18:   0%|          | 0/313 [00:00<?, ?it/s]epoch:18|Train G Loss: 0.4680913890361786  Train D Loss: 1.2032010343551636
[eval]epoch:18: 100%|██████████| 313/313 [00:01<00:00, 217.91it/s]
epoch:18|Test G Score: 0.9995  Test D Score: 0.50025
[train]epoch:19: 100%|██████████| 1875/1875 [00:12<00:00, 145.06it/s]
[eval]epoch:19:   0%|          | 0/313 [00:00<?, ?it/s]epoch:19|Train G Loss: 0.48391503705978395  Train D Loss: 1.1880424275080363
[eval]epoch:19: 100%|██████████| 313/313 [00:01<00:00, 216.23it/s]
epoch:19|Test G Score: 0.9842  Test D Score: 0.5079
[train]epoch:20: 100%|██████████| 1875/1875 [00:13<00:00, 138.07it/s]
epoch:20|Train G Loss: 0.4985790911992391  Train D Loss: 1.166650744565328
[eval]epoch:20: 100%|██████████| 313/313 [00:01<00:00, 192.51it/s]
epoch:20|Test G Score: 0.9533  Test D Score: 0.5232
[train]epoch:21: 100%|██████████| 1875/1875 [00:13<00:00, 138.84it/s]
[eval]epoch:21:   0%|          | 0/313 [00:00<?, ?it/s]epoch:21|Train G Loss: 0.5132446504592896  Train D Loss: 1.1380250610987346
[eval]epoch:21: 100%|██████████| 313/313 [00:01<00:00, 222.60it/s]
epoch:21|Test G Score: 0.9594  Test D Score: 0.5202
[train]epoch:22: 100%|██████████| 1875/1875 [00:13<00:00, 143.06it/s]
epoch:22|Train G Loss: 0.5296086418151855  Train D Loss: 1.093998572953542
[eval]epoch:22: 100%|██████████| 313/313 [00:01<00:00, 217.07it/s]
epoch:22|Test G Score: 0.9168  Test D Score: 0.54155
[train]epoch:23: 100%|██████████| 1875/1875 [00:12<00:00, 145.31it/s]
epoch:23|Train G Loss: 0.5381884034315745  Train D Loss: 1.0698080471038818
[eval]epoch:23: 100%|██████████| 313/313 [00:01<00:00, 219.64it/s]
epoch:23|Test G Score: 0.9184  Test D Score: 0.5407
[train]epoch:24: 100%|██████████| 1875/1875 [00:12<00:00, 144.79it/s]
epoch:24|Train G Loss: 0.547061498785019  Train D Loss: 1.0511650788942972
[eval]epoch:24: 100%|██████████| 313/313 [00:01<00:00, 216.98it/s]
epoch:24|Test G Score: 0.8944  Test D Score: 0.55275
[train]epoch:25: 100%|██████████| 1875/1875 [00:12<00:00, 145.18it/s]
epoch:25|Train G Loss: 0.5475555786927541  Train D Loss: 1.0530290616671245
[eval]epoch:25: 100%|██████████| 313/313 [00:01<00:00, 207.76it/s]
epoch:25|Test G Score: 0.851  Test D Score: 0.57445
[train]epoch:26: 100%|██████████| 1875/1875 [00:13<00:00, 144.00it/s]
epoch:26|Train G Loss: 0.5512707938035329  Train D Loss: 1.050317045243581
[eval]epoch:26: 100%|██████████| 313/313 [00:01<00:00, 204.34it/s]
epoch:26|Test G Score: 0.8336  Test D Score: 0.58315
[train]epoch:27: 100%|██████████| 1875/1875 [00:12<00:00, 145.68it/s]
[eval]epoch:27:   0%|          | 0/313 [00:00<?, ?it/s]epoch:27|Train G Loss: 0.5531968828996022  Train D Loss: 1.0482187390327453
[eval]epoch:27: 100%|██████████| 313/313 [00:01<00:00, 219.78it/s]
epoch:27|Test G Score: 0.8356  Test D Score: 0.58215
[train]epoch:28: 100%|██████████| 1875/1875 [00:13<00:00, 135.91it/s]
[eval]epoch:28:   0%|          | 0/313 [00:00<?, ?it/s]epoch:28|Train G Loss: 0.5603058772563935  Train D Loss: 1.0356980097770692
[eval]epoch:28: 100%|██████████| 313/313 [00:01<00:00, 211.54it/s]
epoch:28|Test G Score: 0.8282  Test D Score: 0.5859
[train]epoch:29: 100%|██████████| 1875/1875 [00:13<00:00, 138.85it/s]
epoch:29|Train G Loss: 0.5646376594384511  Train D Loss: 1.0272360989570617
[eval]epoch:29: 100%|██████████| 313/313 [00:01<00:00, 191.37it/s]
epoch:29|Test G Score: 0.812  Test D Score: 0.5939
[train]epoch:30: 100%|██████████| 1875/1875 [00:13<00:00, 143.24it/s]
epoch:30|Train G Loss: 0.5680709630171458  Train D Loss: 1.0258071581522623
[eval]epoch:30: 100%|██████████| 313/313 [00:01<00:00, 171.36it/s]
epoch:30|Test G Score: 0.777  Test D Score: 0.61125
[train]epoch:31: 100%|██████████| 1875/1875 [00:13<00:00, 137.87it/s]
epoch:31|Train G Loss: 0.570367333316803  Train D Loss: 1.0270372252464295
[eval]epoch:31: 100%|██████████| 313/313 [00:01<00:00, 208.48it/s]
epoch:31|Test G Score: 0.788  Test D Score: 0.60585
[train]epoch:32: 100%|██████████| 1875/1875 [00:14<00:00, 125.15it/s]
epoch:32|Train G Loss: 0.5689761372566223  Train D Loss: 1.032519684569041
[eval]epoch:32: 100%|██████████| 313/313 [00:01<00:00, 201.65it/s]
epoch:32|Test G Score: 0.7886  Test D Score: 0.6054
[train]epoch:33: 100%|██████████| 1875/1875 [00:14<00:00, 128.05it/s]
[eval]epoch:33:   0%|          | 0/313 [00:00<?, ?it/s]epoch:33|Train G Loss: 0.5693015421549479  Train D Loss: 1.035339980093638
[eval]epoch:33: 100%|██████████| 313/313 [00:01<00:00, 158.88it/s]
epoch:33|Test G Score: 0.7879  Test D Score: 0.6057
[train]epoch:34: 100%|██████████| 1875/1875 [00:14<00:00, 133.27it/s]
[eval]epoch:34:   0%|          | 0/313 [00:00<?, ?it/s]epoch:34|Train G Loss: 0.5668578405539195  Train D Loss: 1.0422602198282878
[eval]epoch:34: 100%|██████████| 313/313 [00:01<00:00, 207.55it/s]
epoch:34|Test G Score: 0.7765  Test D Score: 0.61145
[train]epoch:35: 100%|██████████| 1875/1875 [00:14<00:00, 129.03it/s]
epoch:35|Train G Loss: 0.5670834843476613  Train D Loss: 1.0474675672849019
[eval]epoch:35: 100%|██████████| 313/313 [00:01<00:00, 215.83it/s]
epoch:35|Test G Score: 0.7736  Test D Score: 0.6128
[train]epoch:36: 100%|██████████| 1875/1875 [00:14<00:00, 128.17it/s]
epoch:36|Train G Loss: 0.5658628444035848  Train D Loss: 1.0513075345993041
[eval]epoch:36: 100%|██████████| 313/313 [00:01<00:00, 162.43it/s]
epoch:36|Test G Score: 0.7579  Test D Score: 0.62045
[train]epoch:37: 100%|██████████| 1875/1875 [00:14<00:00, 128.96it/s]
[eval]epoch:37:   0%|          | 0/313 [00:00<?, ?it/s]epoch:37|Train G Loss: 0.5655051300366719  Train D Loss: 1.0581976316452026
[eval]epoch:37: 100%|██████████| 313/313 [00:01<00:00, 208.46it/s]
epoch:37|Test G Score: 0.7771  Test D Score: 0.61075
[train]epoch:38: 100%|██████████| 1875/1875 [00:14<00:00, 130.93it/s]
epoch:38|Train G Loss: 0.5654594079812367  Train D Loss: 1.0538349712053934
[eval]epoch:38: 100%|██████████| 313/313 [00:01<00:00, 185.77it/s]
epoch:38|Test G Score: 0.7541  Test D Score: 0.62205
[train]epoch:39: 100%|██████████| 1875/1875 [00:14<00:00, 125.45it/s]
[eval]epoch:39:   0%|          | 0/313 [00:00<?, ?it/s]epoch:39|Train G Loss: 0.5672246192773183  Train D Loss: 1.0494285337766012
[eval]epoch:39: 100%|██████████| 313/313 [00:01<00:00, 171.04it/s]
epoch:39|Test G Score: 0.7769  Test D Score: 0.6107
[train]epoch:40: 100%|██████████| 1875/1875 [00:15<00:00, 117.92it/s]
[eval]epoch:40:   0%|          | 0/313 [00:00<?, ?it/s]epoch:40|Train G Loss: 0.5721065460681916  Train D Loss: 1.0330856778462727
[eval]epoch:40: 100%|██████████| 313/313 [00:01<00:00, 187.56it/s]
epoch:40|Test G Score: 0.7586  Test D Score: 0.6199
[train]epoch:41: 100%|██████████| 1875/1875 [00:15<00:00, 122.10it/s]
epoch:41|Train G Loss: 0.5743793784300486  Train D Loss: 1.0288026348431905
[eval]epoch:41: 100%|██████████| 313/313 [00:01<00:00, 206.37it/s]
epoch:41|Test G Score: 0.7728  Test D Score: 0.6129
[train]epoch:42: 100%|██████████| 1875/1875 [00:13<00:00, 139.09it/s]
epoch:42|Train G Loss: 0.5785000865777333  Train D Loss: 1.021603403186798
[eval]epoch:42: 100%|██████████| 313/313 [00:01<00:00, 221.09it/s]
epoch:42|Test G Score: 0.7526  Test D Score: 0.6229
[train]epoch:43: 100%|██████████| 1875/1875 [00:12<00:00, 144.34it/s]
epoch:43|Train G Loss: 0.5783152904351553  Train D Loss: 1.0219791579882305
[eval]epoch:43: 100%|██████████| 313/313 [00:01<00:00, 221.55it/s]
epoch:43|Test G Score: 0.7678  Test D Score: 0.6158
[train]epoch:44: 100%|██████████| 1875/1875 [00:13<00:00, 142.33it/s]
[eval]epoch:44:   0%|          | 0/313 [00:00<?, ?it/s]epoch:44|Train G Loss: 0.5834402229150136  Train D Loss: 1.0131274561564128
[eval]epoch:44: 100%|██████████| 313/313 [00:01<00:00, 209.97it/s]
epoch:44|Test G Score: 0.7212  Test D Score: 0.63855
[train]epoch:45: 100%|██████████| 1875/1875 [00:13<00:00, 135.03it/s]
epoch:45|Train G Loss: 0.5835320703665415  Train D Loss: 1.0110607721964517
[eval]epoch:45: 100%|██████████| 313/313 [00:01<00:00, 210.29it/s]
epoch:45|Test G Score: 0.776  Test D Score: 0.61135
[train]epoch:46: 100%|██████████| 1875/1875 [00:13<00:00, 142.94it/s]
[eval]epoch:46:   0%|          | 0/313 [00:00<?, ?it/s]epoch:46|Train G Loss: 0.5882964856624603  Train D Loss: 0.9964836405118307
[eval]epoch:46: 100%|██████████| 313/313 [00:01<00:00, 221.34it/s]
epoch:46|Test G Score: 0.7191  Test D Score: 0.64005
[train]epoch:47: 100%|██████████| 1875/1875 [00:13<00:00, 143.21it/s]
[eval]epoch:47:   0%|          | 0/313 [00:00<?, ?it/s]epoch:47|Train G Loss: 0.590389885600408  Train D Loss: 0.9914610226949055
[eval]epoch:47: 100%|██████████| 313/313 [00:01<00:00, 208.52it/s]
epoch:47|Test G Score: 0.7548  Test D Score: 0.62225
[train]epoch:48: 100%|██████████| 1875/1875 [00:14<00:00, 125.00it/s]
[eval]epoch:48:   0%|          | 0/313 [00:00<?, ?it/s]epoch:48|Train G Loss: 0.594319108804067  Train D Loss: 0.9779991204897562
[eval]epoch:48: 100%|██████████| 313/313 [00:01<00:00, 193.07it/s]
epoch:48|Test G Score: 0.7086  Test D Score: 0.64535
[train]epoch:49: 100%|██████████| 1875/1875 [00:14<00:00, 127.71it/s]
[eval]epoch:49:   0%|          | 0/313 [00:00<?, ?it/s]epoch:49|Train G Loss: 0.5970552474975586  Train D Loss: 0.9745462191263835
[eval]epoch:49: 100%|██████████| 313/313 [00:01<00:00, 202.03it/s]
epoch:49|Test G Score: 0.7224  Test D Score: 0.6382
[train]epoch:50: 100%|██████████| 1875/1875 [00:13<00:00, 134.68it/s]
epoch:50|Train G Loss: 0.5979735075155894  Train D Loss: 0.9683707204818726
[eval]epoch:50: 100%|██████████| 313/313 [00:01<00:00, 213.01it/s]
epoch:50|Test G Score: 0.7138  Test D Score: 0.6426
[train]epoch:51: 100%|██████████| 1875/1875 [00:14<00:00, 132.22it/s]
[eval]epoch:51:   0%|          | 0/313 [00:00<?, ?it/s]epoch:51|Train G Loss: 0.6023209547519683  Train D Loss: 0.9649083198229472
[eval]epoch:51: 100%|██████████| 313/313 [00:01<00:00, 184.66it/s]
epoch:51|Test G Score: 0.7182  Test D Score: 0.64045
[train]epoch:52: 100%|██████████| 1875/1875 [00:13<00:00, 135.84it/s]
epoch:52|Train G Loss: 0.6021316982587178  Train D Loss: 0.9624602799415588
[eval]epoch:52: 100%|██████████| 313/313 [00:01<00:00, 201.77it/s]
epoch:52|Test G Score: 0.6623  Test D Score: 0.6681
[train]epoch:53: 100%|██████████| 1875/1875 [00:14<00:00, 130.29it/s]
[eval]epoch:53:   0%|          | 0/313 [00:00<?, ?it/s]epoch:53|Train G Loss: 0.6053468057314555  Train D Loss: 0.9644535427729288
[eval]epoch:53: 100%|██████████| 313/313 [00:01<00:00, 211.69it/s]
epoch:53|Test G Score: 0.6811  Test D Score: 0.65875
[train]epoch:54: 100%|██████████| 1875/1875 [00:13<00:00, 134.95it/s]
epoch:54|Train G Loss: 0.6043922148386638  Train D Loss: 0.96494202003479
[eval]epoch:54: 100%|██████████| 313/313 [00:01<00:00, 204.23it/s]
epoch:54|Test G Score: 0.7005  Test D Score: 0.64905
[train]epoch:55: 100%|██████████| 1875/1875 [00:14<00:00, 128.87it/s]
[eval]epoch:55:   0%|          | 0/313 [00:00<?, ?it/s]epoch:55|Train G Loss: 0.6066651909510294  Train D Loss: 0.9640112183570861
[eval]epoch:55: 100%|██████████| 313/313 [00:01<00:00, 178.45it/s]
epoch:55|Test G Score: 0.6892  Test D Score: 0.65445
[train]epoch:56: 100%|██████████| 1875/1875 [00:15<00:00, 124.12it/s]
epoch:56|Train G Loss: 0.6085456945737203  Train D Loss: 0.9618674217542013
[eval]epoch:56: 100%|██████████| 313/313 [00:01<00:00, 206.16it/s]
epoch:56|Test G Score: 0.6819  Test D Score: 0.65785
[train]epoch:57: 100%|██████████| 1875/1875 [00:14<00:00, 126.93it/s]
[eval]epoch:57:   0%|          | 0/313 [00:00<?, ?it/s]epoch:57|Train G Loss: 0.6037535588264465  Train D Loss: 0.9710461963017781
[eval]epoch:57: 100%|██████████| 313/313 [00:01<00:00, 190.59it/s]
epoch:57|Test G Score: 0.6865  Test D Score: 0.65595
[train]epoch:58: 100%|██████████| 1875/1875 [00:14<00:00, 126.89it/s]
[eval]epoch:58:   0%|          | 0/313 [00:00<?, ?it/s]epoch:58|Train G Loss: 0.6051236891269683  Train D Loss: 0.9722556677818298
[eval]epoch:58: 100%|██████████| 313/313 [00:01<00:00, 190.42it/s]
epoch:58|Test G Score: 0.676  Test D Score: 0.66145
[train]epoch:59: 100%|██████████| 1875/1875 [00:14<00:00, 132.28it/s]
[eval]epoch:59:   0%|          | 0/313 [00:00<?, ?it/s]epoch:59|Train G Loss: 0.6038665617624919  Train D Loss: 0.9729498882293701
[eval]epoch:59: 100%|██████████| 313/313 [00:01<00:00, 206.56it/s]
epoch:59|Test G Score: 0.7044  Test D Score: 0.64705
[train]epoch:60: 100%|██████████| 1875/1875 [00:15<00:00, 120.76it/s]
epoch:60|Train G Loss: 0.6056656357765198  Train D Loss: 0.9696332246780396
[eval]epoch:60: 100%|██████████| 313/313 [00:01<00:00, 181.07it/s]
epoch:60|Test G Score: 0.7004  Test D Score: 0.6487
[train]epoch:61: 100%|██████████| 1875/1875 [00:14<00:00, 132.07it/s]
[eval]epoch:61:   0%|          | 0/313 [00:00<?, ?it/s]epoch:61|Train G Loss: 0.6064142129898071  Train D Loss: 0.9691213243484497
[eval]epoch:61: 100%|██████████| 313/313 [00:01<00:00, 210.15it/s]
epoch:61|Test G Score: 0.7098  Test D Score: 0.64445
[train]epoch:62: 100%|██████████| 1875/1875 [00:14<00:00, 133.92it/s]
[eval]epoch:62:   0%|          | 0/313 [00:00<?, ?it/s]epoch:62|Train G Loss: 0.6020772522131602  Train D Loss: 0.9768669911066691
[eval]epoch:62: 100%|██████████| 313/313 [00:01<00:00, 209.06it/s]
epoch:62|Test G Score: 0.6712  Test D Score: 0.66365
[train]epoch:63: 100%|██████████| 1875/1875 [00:15<00:00, 123.73it/s]
epoch:63|Train G Loss: 0.6038358168443044  Train D Loss: 0.9754874487559001
[eval]epoch:63: 100%|██████████| 313/313 [00:01<00:00, 204.81it/s]
epoch:63|Test G Score: 0.683  Test D Score: 0.65755
[train]epoch:64: 100%|██████████| 1875/1875 [00:15<00:00, 122.37it/s]
epoch:64|Train G Loss: 0.6046170507748921  Train D Loss: 0.9736968674023946
[eval]epoch:64: 100%|██████████| 313/313 [00:01<00:00, 208.06it/s]
epoch:64|Test G Score: 0.6898  Test D Score: 0.6542
[train]epoch:65: 100%|██████████| 1875/1875 [00:14<00:00, 128.07it/s]
epoch:65|Train G Loss: 0.6027337124824524  Train D Loss: 0.9787304972330729
[eval]epoch:65: 100%|██████████| 313/313 [00:01<00:00, 194.54it/s]
epoch:65|Test G Score: 0.707  Test D Score: 0.6454
[train]epoch:66: 100%|██████████| 1875/1875 [00:13<00:00, 138.57it/s]
epoch:66|Train G Loss: 0.601389243777593  Train D Loss: 0.9830222620328267
[eval]epoch:66: 100%|██████████| 313/313 [00:01<00:00, 184.05it/s]
epoch:66|Test G Score: 0.6984  Test D Score: 0.6497
[train]epoch:67: 100%|██████████| 1875/1875 [00:13<00:00, 135.19it/s]
epoch:67|Train G Loss: 0.6001422825495402  Train D Loss: 0.9867032630284627
[eval]epoch:67: 100%|██████████| 313/313 [00:01<00:00, 220.74it/s]
epoch:67|Test G Score: 0.7095  Test D Score: 0.64385
[train]epoch:68: 100%|██████████| 1875/1875 [00:13<00:00, 142.23it/s]
[eval]epoch:68:   0%|          | 0/313 [00:00<?, ?it/s]epoch:68|Train G Loss: 0.6018287893931071  Train D Loss: 0.985523048210144
[eval]epoch:68: 100%|██████████| 313/313 [00:01<00:00, 223.06it/s]
epoch:68|Test G Score: 0.71  Test D Score: 0.6431
[train]epoch:69: 100%|██████████| 1875/1875 [00:13<00:00, 144.19it/s]
[eval]epoch:69:   0%|          | 0/313 [00:00<?, ?it/s]epoch:69|Train G Loss: 0.5990714596430461  Train D Loss: 0.9925410816510518
[eval]epoch:69: 100%|██████████| 313/313 [00:01<00:00, 220.08it/s]
epoch:69|Test G Score: 0.7185  Test D Score: 0.63905
[train]epoch:70: 100%|██████████| 1875/1875 [00:12<00:00, 144.33it/s]
epoch:70|Train G Loss: 0.5974074437777201  Train D Loss: 0.9976363753318787
[eval]epoch:70: 100%|██████████| 313/313 [00:01<00:00, 216.39it/s]
epoch:70|Test G Score: 0.6939  Test D Score: 0.65165
[train]epoch:71: 100%|██████████| 1875/1875 [00:13<00:00, 142.39it/s]
epoch:71|Train G Loss: 0.5952021143277486  Train D Loss: 1.00476540184021
[eval]epoch:71: 100%|██████████| 313/313 [00:01<00:00, 210.13it/s]
epoch:71|Test G Score: 0.7088  Test D Score: 0.64405
[train]epoch:72: 100%|██████████| 1875/1875 [00:13<00:00, 142.71it/s]
[eval]epoch:72:   0%|          | 0/313 [00:00<?, ?it/s]epoch:72|Train G Loss: 0.5942630872408549  Train D Loss: 1.0061080835024516
[eval]epoch:72: 100%|██████████| 313/313 [00:01<00:00, 224.19it/s]
epoch:72|Test G Score: 0.6923  Test D Score: 0.65205
[train]epoch:73: 100%|██████████| 1875/1875 [00:13<00:00, 142.84it/s]
[eval]epoch:73:   0%|          | 0/313 [00:00<?, ?it/s]epoch:73|Train G Loss: 0.5953716031074524  Train D Loss: 1.0063148941040039
[eval]epoch:73: 100%|██████████| 313/313 [00:01<00:00, 219.23it/s]
epoch:73|Test G Score: 0.7076  Test D Score: 0.6441
[train]epoch:74: 100%|██████████| 1875/1875 [00:12<00:00, 144.75it/s]
[eval]epoch:74:   0%|          | 0/313 [00:00<?, ?it/s]epoch:74|Train G Loss: 0.5940316377321879  Train D Loss: 1.0076266440709432
[eval]epoch:74: 100%|██████████| 313/313 [00:01<00:00, 221.06it/s]
epoch:74|Test G Score: 0.7006  Test D Score: 0.6474
[train]epoch:75: 100%|██████████| 1875/1875 [00:13<00:00, 143.64it/s]
epoch:75|Train G Loss: 0.5935685668627421  Train D Loss: 1.0103028052012126
[eval]epoch:75: 100%|██████████| 313/313 [00:01<00:00, 219.64it/s]
epoch:75|Test G Score: 0.7092  Test D Score: 0.6431
[train]epoch:76: 100%|██████████| 1875/1875 [00:13<00:00, 137.31it/s]
epoch:76|Train G Loss: 0.5929852469126383  Train D Loss: 1.01107987130483
[eval]epoch:76: 100%|██████████| 313/313 [00:01<00:00, 220.90it/s]
epoch:76|Test G Score: 0.701  Test D Score: 0.6474
[train]epoch:77: 100%|██████████| 1875/1875 [00:13<00:00, 143.02it/s]
[eval]epoch:77:   0%|          | 0/313 [00:00<?, ?it/s]epoch:77|Train G Loss: 0.592886395740509  Train D Loss: 1.011134458955129
[eval]epoch:77: 100%|██████████| 313/313 [00:01<00:00, 219.19it/s]
epoch:77|Test G Score: 0.6894  Test D Score: 0.6533
[train]epoch:78: 100%|██████████| 1875/1875 [00:13<00:00, 142.70it/s]
[eval]epoch:78:   0%|          | 0/313 [00:00<?, ?it/s]epoch:78|Train G Loss: 0.5935037167231242  Train D Loss: 1.0090930287996929
[eval]epoch:78: 100%|██████████| 313/313 [00:01<00:00, 220.58it/s]
epoch:78|Test G Score: 0.689  Test D Score: 0.6536
[train]epoch:79: 100%|██████████| 1875/1875 [00:13<00:00, 138.54it/s]
epoch:79|Train G Loss: 0.5961865306695302  Train D Loss: 1.0014720521291096
[eval]epoch:79: 100%|██████████| 313/313 [00:01<00:00, 194.10it/s]
epoch:79|Test G Score: 0.6801  Test D Score: 0.65815
[train]epoch:80: 100%|██████████| 1875/1875 [00:14<00:00, 131.92it/s]
epoch:80|Train G Loss: 0.5974672158241272  Train D Loss: 1.0004722514470419
[eval]epoch:80: 100%|██████████| 313/313 [00:01<00:00, 195.83it/s]
epoch:80|Test G Score: 0.6665  Test D Score: 0.6654
[train]epoch:81: 100%|██████████| 1875/1875 [00:13<00:00, 137.00it/s]
[eval]epoch:81:   0%|          | 0/313 [00:00<?, ?it/s]epoch:81|Train G Loss: 0.5967240933577219  Train D Loss: 0.9962765798886617
[eval]epoch:81: 100%|██████████| 313/313 [00:01<00:00, 218.17it/s]
epoch:81|Test G Score: 0.6757  Test D Score: 0.66115
[train]epoch:82: 100%|██████████| 1875/1875 [00:12<00:00, 144.36it/s]
[eval]epoch:82:   0%|          | 0/313 [00:00<?, ?it/s]epoch:82|Train G Loss: 0.6012879039287568  Train D Loss: 0.9886766562779744
[eval]epoch:82: 100%|██████████| 313/313 [00:01<00:00, 219.59it/s]
epoch:82|Test G Score: 0.7122  Test D Score: 0.64295
[train]epoch:83: 100%|██████████| 1875/1875 [00:13<00:00, 143.35it/s]
[eval]epoch:83:   0%|          | 0/313 [00:00<?, ?it/s]epoch:83|Train G Loss: 0.6017070343971253  Train D Loss: 0.9845438721021016
[eval]epoch:83: 100%|██████████| 313/313 [00:01<00:00, 221.00it/s]
epoch:83|Test G Score: 0.7056  Test D Score: 0.64625
[train]epoch:84: 100%|██████████| 1875/1875 [00:13<00:00, 141.74it/s]
epoch:84|Train G Loss: 0.6046234590848287  Train D Loss: 0.9782138200759888
[eval]epoch:84: 100%|██████████| 313/313 [00:01<00:00, 215.53it/s]
epoch:84|Test G Score: 0.6848  Test D Score: 0.65615
[train]epoch:85: 100%|██████████| 1875/1875 [00:13<00:00, 144.12it/s]
epoch:85|Train G Loss: 0.6056904099464416  Train D Loss: 0.9750500425338745
[eval]epoch:85: 100%|██████████| 313/313 [00:01<00:00, 208.30it/s]
epoch:85|Test G Score: 0.695  Test D Score: 0.6512
[train]epoch:86: 100%|██████████| 1875/1875 [00:13<00:00, 144.12it/s]
epoch:86|Train G Loss: 0.6056853388945261  Train D Loss: 0.9744437066078186
[eval]epoch:86: 100%|██████████| 313/313 [00:01<00:00, 218.78it/s]
epoch:86|Test G Score: 0.6631  Test D Score: 0.6673
[train]epoch:87: 100%|██████████| 1875/1875 [00:13<00:00, 142.24it/s]
epoch:87|Train G Loss: 0.6060712915102641  Train D Loss: 0.974925676759084
[eval]epoch:87: 100%|██████████| 313/313 [00:01<00:00, 208.39it/s]
epoch:87|Test G Score: 0.7048  Test D Score: 0.6469
[train]epoch:88: 100%|██████████| 1875/1875 [00:13<00:00, 140.91it/s]
epoch:88|Train G Loss: 0.6069549886067709  Train D Loss: 0.9742900141716003
[eval]epoch:88: 100%|██████████| 313/313 [00:01<00:00, 216.85it/s]
epoch:88|Test G Score: 0.6769  Test D Score: 0.6605
[train]epoch:89: 100%|██████████| 1875/1875 [00:12<00:00, 145.08it/s]
[eval]epoch:89:   0%|          | 0/313 [00:00<?, ?it/s]epoch:89|Train G Loss: 0.6073180778344472  Train D Loss: 0.9727328990936279
[eval]epoch:89: 100%|██████████| 313/313 [00:01<00:00, 217.77it/s]
epoch:89|Test G Score: 0.6886  Test D Score: 0.65475
[train]epoch:90: 100%|██████████| 1875/1875 [00:14<00:00, 132.71it/s]
epoch:90|Train G Loss: 0.608623680416743  Train D Loss: 0.969793729686737
[eval]epoch:90: 100%|██████████| 313/313 [00:01<00:00, 203.90it/s]
epoch:90|Test G Score: 0.6534  Test D Score: 0.672
[train]epoch:91: 100%|██████████| 1875/1875 [00:13<00:00, 135.12it/s]
[eval]epoch:91:   0%|          | 0/313 [00:00<?, ?it/s]epoch:91|Train G Loss: 0.6114623177687327  Train D Loss: 0.9638599496205648
[eval]epoch:91: 100%|██████████| 313/313 [00:01<00:00, 223.67it/s]
epoch:91|Test G Score: 0.674  Test D Score: 0.66135
[train]epoch:92: 100%|██████████| 1875/1875 [00:14<00:00, 132.12it/s]
[eval]epoch:92:   0%|          | 0/313 [00:00<?, ?it/s]epoch:92|Train G Loss: 0.610090655485789  Train D Loss: 0.967642946879069
[eval]epoch:92: 100%|██████████| 313/313 [00:01<00:00, 211.04it/s]
epoch:92|Test G Score: 0.6511  Test D Score: 0.67365
[train]epoch:93: 100%|██████████| 1875/1875 [00:13<00:00, 140.41it/s]
[eval]epoch:93:   0%|          | 0/313 [00:00<?, ?it/s]epoch:93|Train G Loss: 0.6112490410804748  Train D Loss: 0.9639183290481568
[eval]epoch:93: 100%|██████████| 313/313 [00:01<00:00, 209.29it/s]
epoch:93|Test G Score: 0.6783  Test D Score: 0.65955
[train]epoch:94: 100%|██████████| 1875/1875 [00:13<00:00, 137.81it/s]
[eval]epoch:94:   0%|          | 0/313 [00:00<?, ?it/s]epoch:94|Train G Loss: 0.611319488286972  Train D Loss: 0.9641610447565715
[eval]epoch:94: 100%|██████████| 313/313 [00:01<00:00, 213.48it/s]
epoch:94|Test G Score: 0.6501  Test D Score: 0.6738
[train]epoch:95: 100%|██████████| 1875/1875 [00:13<00:00, 141.90it/s]
[eval]epoch:95:   0%|          | 0/313 [00:00<?, ?it/s]epoch:95|Train G Loss: 0.6123758721828461  Train D Loss: 0.9626293495814006
[eval]epoch:95: 100%|██████████| 313/313 [00:01<00:00, 216.70it/s]
epoch:95|Test G Score: 0.6813  Test D Score: 0.6582
[train]epoch:96: 100%|██████████| 1875/1875 [00:13<00:00, 138.14it/s]
[eval]epoch:96:   0%|          | 0/313 [00:00<?, ?it/s]epoch:96|Train G Loss: 0.6152368485768636  Train D Loss: 0.9562486302693685
[eval]epoch:96: 100%|██████████| 313/313 [00:01<00:00, 214.50it/s]
epoch:96|Test G Score: 0.6816  Test D Score: 0.65805
[train]epoch:97: 100%|██████████| 1875/1875 [00:13<00:00, 143.21it/s]
[eval]epoch:97:   0%|          | 0/313 [00:00<?, ?it/s]epoch:97|Train G Loss: 0.6154786991437277  Train D Loss: 0.9537186385154724
[eval]epoch:97: 100%|██████████| 313/313 [00:01<00:00, 208.64it/s]
epoch:97|Test G Score: 0.665  Test D Score: 0.66625
[train]epoch:98: 100%|██████████| 1875/1875 [00:13<00:00, 143.94it/s]
[eval]epoch:98:   0%|          | 0/313 [00:00<?, ?it/s]epoch:98|Train G Loss: 0.6172778903802236  Train D Loss: 0.9502429571151734
[eval]epoch:98: 100%|██████████| 313/313 [00:01<00:00, 220.16it/s]
epoch:98|Test G Score: 0.6544  Test D Score: 0.67145
[train]epoch:99: 100%|██████████| 1875/1875 [00:13<00:00, 143.74it/s]
[eval]epoch:99:   0%|          | 0/313 [00:00<?, ?it/s]epoch:99|Train G Loss: 0.6185870854536692  Train D Loss: 0.9473249974250794
[eval]epoch:99: 100%|██████████| 313/313 [00:01<00:00, 220.78it/s]
epoch:99|Test G Score: 0.6617  Test D Score: 0.66815
该图为真概率为: [[0.903977]]

第一个图是刚开始训练时的生成数据,第二个图是训练到50个epochs生成的数据,第三个图是训练到100epochs生成的数据。

3 总结

生成模型是深度学习领域难度较大且较为重要的一类模型。生成对抗网络能够在半监督或者无监督的应用场景下进行生成任务的学习。目前而言,生成对抗网络在计算机视觉、自然语言处理等领域取得了令人惊叹的成果。生成对抗模型是近年来复杂数据分布上无监督学习最具前景的方法之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1189260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubectl声明式资源管理命令

一、声明式资源管理介绍&#xff1a; 适合于对资源的修改操作声明式资源管理方法依赖于资源配置清单文件对资源进行管理资源配置清单文件有两种格式&#xff1a;yaml&#xff08;人性化&#xff0c;易读&#xff09;&#xff0c;json&#xff08;易于api接口解析&#xff09;对…

如何排查CPU飙升的问题所在

我们在线上排查问题的时候发现系统的CPU直接爆红了,如何排查问题呢?怎么快速定位问题的所在呢? linux系统下: 首先我们通过top命令来查看那个进程占用CPU过大: top 这里只是简单的模拟一下,假设java进程占用CPU很大,那么我们通过这个进程来查找进程下的线程使用CPU的情况…

【23真题】C9无歧视,专业课均分130!

今天分享的是23年哈尔滨工业大学803的信号与系统部分的试题及解析。 本套试卷难度分析&#xff1a;22年哈今天分享的是23年哈尔滨工业大学803的信号与系统部分的试题及解析。 哈尔滨工业大学803考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&…

6-爬虫-scrapy解析数据(使用css选择器解析数据、xpath 解析数据)、 配置文件

1 scrapy解析数据 1.1 使用css选择器解析数据 1.2 xpath 解析数据 2 配置文件 3 整站爬取博客–》爬取详情–》数据传递 scrapy 爬虫框架补充 # 1 打码平台---》破解验证码-数字字母&#xff1a;ddddocr-计算题&#xff0c;滑块&#xff0c;成语。。。-云打码&#xff0c;超…

文件上传 [GXYCTF2019]BabyUpload1

打开题目 传个是jpg文件后缀的一句话木马上去 代码如下 <script languagephp>eval($_POST[v]);</script> 发现上传成功 因此我们需要先上传 .htaccess 文件&#xff0c;然后再上传 2.jpg文件 .htaccess作用&#xff1a;文件将别的后缀名文件内容解析为php程序…

使用matlab实现图像信号的色彩空间转换

利用matlab对图像信号进行读取&#xff0c;并对RGB空间进行转换&#xff0c;如转换到HSI空间等。 下面的这个代码是在使用了rgb2hsi()方法失败后&#xff0c;进行修改的。 rgb2hsi(img)这个方法可以将RGB图像转换为HIS图像&#xff1b;但是爆出了 Untitled5(line 5)hsi rgb2h…

通过Cookie和Session来实现网站中登录账号的功能

文章目录 一、Cookie和Session二、基于Cookie和Session实现登录账号的功能2.1步骤一2.2步骤二2.3步骤三2.4总结通过Cookie和Session来实现登录功能2.5运行截图 一、Cookie和Session cookie是http请求header中的一个属性&#xff0c;是浏览器持久化存储数据的一种机制&#xff…

2023年香港专才计划(输入内地人才计划)拿身份最新申请攻略!

2023年香港专才计划&#xff08;输入内地人才计划&#xff09;拿身份最新申请攻略&#xff01; 近年来&#xff0c;香港受持续的人口老龄化等多因素影响&#xff0c;2022年香港人口总计减少了约12.17万人&#xff0c;跌幅1.6%&#xff0c;其中净移出人数约9.5万人。在此背景下&…

web3 从redux中拿出所有已完成订单 并渲染到对应的Table列表中

上文web3 React dapp项目通过事件从区块链中拿到 已取消 已完成 和所有的订单数据 并存入redux中 中 我们已经从 区块中拿到了自己的订单 然后 我们恢复一下上文的环境 ganache ganache -d然后 登一下 MetaMask 然后 用我们的项目 发布一下合约 truffle migrate --reset然后…

汽车标定技术(八)--MPC57xx是如何支持标定的页切换

目录 1.页切换的概念 1.1 标定常量的理解 1.2 页切换 2.MPC57xx的Overlay模块 3.小结 1.页切换的概念 在汽车标定测量中&#xff0c;有一个概念我想很多人都听过&#xff0c;但是实际上在项目里没有用到过&#xff0c;那就是今天要讲的页切换概念。在讲页切换的时候&#…

自考改革过渡期!广东小自考最优解只需要2门笔试

图片来源&#xff1a;广东省考试院* 近期广东教育考试院公布了自考专业调整的相关通知&#xff0c;新的专业考试计划从2026年1月起执行。 这次改革过渡期中有一个重大利好消息&#xff0c;小自考专业笔试统考科目最少只需考2门笔试&#xff01; 这是为什么呢&#xff1f; 小…

蓝牙安全管理(SM:Security Manager)规范详解

总述 配对(Pairing)分为三个阶段&#xff0c;前两个阶段是必须的&#xff0c;而第三阶段是可选的&#xff0c;三个阶段如下&#xff1a; 阶段1&#xff1a;配对功能交换(Pairing Feature Exchange) 阶段2(LE传统配对 LE legacy pairing)&#xff1a;短期密钥(STK:Short Term…

阿里巴巴国际站为什么凉了?数字一体化方案崛起!

随着全球化和数字化的浪潮不断涌现&#xff0c;跨境电商市场一直以惊人的速度增长。中国作为主要的出口和进口市场之一&#xff0c;成为跨境贸易的重要参与者。然而&#xff0c;近年来&#xff0c;阿里巴巴国际站似乎面临了一些挑战&#xff0c;同时数字一体化方案崭露头角&…

FallO’ween 活动:元宇宙中秋天与万圣节的邂逅

秋风徐徐&#xff0c;万圣节已经来临&#xff01;还有什么比沉浸在 FallOween 的世界更好的方式来庆祝这个“恐怖“的季节呢&#xff1f;这项全新的季节性活动将于 10 月 30 日推出&#xff0c;将秋季的迷人气息与万圣节的怪异魅力融为一体&#xff0c;为大家带来为期 30 天的冒…

初识Java 17-4 反射

本笔记参考自&#xff1a; 《On Java 中文版》 接口和类型信息 interface关键字的一个重要目标就是允许程序员隔离组件&#xff0c;减少耦合。但我们可以通过类型信息来绕过接口的隔离&#xff0c;这使得接口不一定能够保证解耦。 为了演示这一实现&#xff0c;我们需要先创建一…

LabVIEW调用库函数节点无法显示DLL中的函数

LabVIEW调用库函数节点无法显示DLL中的函数 正在使用调用库函数节点来调用一个DLL文件。可是&#xff0c;当浏览该DLL时&#xff0c;却无法在Function Name下拉菜单中选择任何函数。为什么所有的DLL函数都无法选中呢&#xff1f; 解答: 调用的DLL可能是通过.NET封装的&#x…

1.77亿美元,安世被迫出售晶圆大厂NWF | 百能云芯

11月9日消息&#xff0c;安世半导体&#xff08;Nexperia&#xff09;与纽交所上市公司威世&#xff08;Vishay&#xff09;签署协议&#xff0c;作价1.77亿美元出售英国Newport Wafer Fab&#xff08;以下简称NWF&#xff09;的母公司NEPTUNE 6 LIMITED&#xff08;以下简称“…

kubectl 资源管理命令-陈述式

目录 一、kubectl陈述式资源管理&#xff1a; 二、kubectl陈述式对象管理&#xff1a; 1.基础命令使用&#xff1a; 1.1 帮助手册&#xff1a; 1.2 查看版本信息&#xff1a; ​编辑 1.3 查看资源对象简写: 1.4 查看集群信息: 1.5 配置kubectl自动补全: 1.6 node节点查看日志…

使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

【LeetCode百道热题】1.两数之和

一&#xff0c;题目描述 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在改数组中找出和为目标值target的那两个整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;但是&#xff0c;数组中同一个元素在答案里不能重复出现…