使用 Keras 和 TensorFlow 构建辅助 GAN


生成对抗网络 (GAN) 可以使用 Keras 和 TensorFlow 构建,它通过能够生成逼真且高质量的合成数据彻底改变了人工智能领域。

在本文中,我们将深入了解 GAN 的世界,并探讨辅助 GAN 的概念。通过 Keras 和 TensorFlow 的强大组合,我们将演示如何构建一个包含额外信息的辅助 GAN,以增强生成过程。

了解 GAN

在深入研究辅助 GAN 之前,了解 GAN 的基础知识至关重要。GAN 由两个神经网络组成:生成器和判别器。生成器的目标是创建逼真的样本,例如图像,而判别器的任务是在真实数据和生成数据之间进行区分。这两个网络通过对抗训练不断提高其性能。

什么是辅助 GAN?

辅助 GAN,也称为 ACGAN,通过在判别器中添加辅助分类器来扩展传统的 GAN 架构。此额外的分类器为生成的输出提供了额外的控制级别。当目标是基于特定标签或类别生成数据时,ACGAN 特别有用。

构建辅助 GAN 的好处

以下是构建辅助 GAN 的好处 -

改进的数据控制  通过结合辅助分类器,ACGAN 允许基于特定标签或类别生成数据。这种控制在各种应用中都非常有用,例如图像合成、数据增强和条件数据生成。

增强的多数据样性  ACGAN 中的辅助分类器鼓励生成器探索不同的类别,从而提高数据的多样性。当处理不平衡数据集或生成多样化样本时,此功能非常有价值。

使用 Keras 和 Tensorflow 构建辅助 GAN 的步骤

在深入研究实现之前,我们需要设置我们的开发环境。我们将使用 Keras(一个高级深度学习库)以及 TensorFlow 作为后端。确保您已在您的机器上安装了这两个库。

以下是我们将遵循的步骤,以使用 Keras 和 Tensorflow 构建辅助 GAN -

步骤 1:导入所需的库

我们需要导入必要的库。导入 Keras 和 TensorFlow。

步骤 2:定义生成器网络

  • 生成器网络以大小为 100 的随机噪声向量作为输入。
  • 它包含三个具有 ReLU 激活函数的密集层。
  • 输出层有 784 个单元,具有 sigmoid 激活函数,以生成大小为 28x28x1 的图像。
  • 最后一层将输出重塑为所需的图像形状。

步骤 3:定义判别器网络

  • 判别器网络以大小为 28x28x1 的图像作为输入。

  • 它包含一个展平层,将图像转换为 1D 向量。

  • 后面跟着一个具有 256 个单元和 ReLU 激活函数的密集层。

  • 为了防止过拟合,添加了一个具有 0.3 辍学率的辍学层。

  • 最后一层是一个具有 sigmoid 激活函数的密集层,它输出输入图像为真实或伪造的概率。

步骤 4:定义辅助网络

  • 辅助网络以相同的随机噪声向量作为输入。

  • 它包含两个具有 ReLU 激活函数的密集层。

  • 最后一层有 10 个单元,具有 softmax 激活函数,表示每个数字类别 (0-9) 的概率。

步骤 5:定义 GAN 模型

  • GAN 模型以随机噪声向量作为输入。

  • 它将输入传递到生成器网络以生成图像。

  • 然后将生成的图像馈送到判别器以确定其有效性。

  • 同时,输入噪声向量通过辅助网络来预测数字标签。

  • GAN 模型输出生成的图像的有效性和预测的标签。

步骤 6:打印 GAN 模型摘要

  • 摘要提供了 GAN 模型架构的概述。

  • 它显示了每一层的类型、输出形状和参数数量。

  • 显示了模型中可训练参数的总数。

示例

让我们来看一个工作示例 -

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# Step 1: Define the generator network
generator = keras.Sequential([
   layers.Dense(128, input_dim=100, activation="relu"),
   layers.Dense(256, activation="relu"),
   layers.Dense(784, activation="sigmoid"),
   layers.Reshape((28, 28, 1))
])

# Step 2: Define the discriminator network
discriminator = keras.Sequential([
   layers.Flatten(input_shape=(28, 28, 1)),
   layers.Dense(256, activation="relu"),
   layers.Dropout(0.3),
   layers.Dense(1, activation="sigmoid")
])

# Step 3: Define the auxiliary network
auxiliary = keras.Sequential([
   layers.Dense(128, input_dim=100, activation="relu"),
   layers.Dense(10, activation="softmax")
])

# Step 4: Define the GAN model
latent_dim = 100
gan_input = keras.Input(shape=(latent_dim,))
generated_image = generator(gan_input)
validity = discriminator(generated_image)
label = auxiliary(gan_input)

gan = keras.models.Model(gan_input, [validity, label])

# Step 5: Print the GAN model summary
gan.summary()

输出

C:\Users\Tutorialspoint>python mtt.py
Model: "model"
__________________________________________________________________________________________________
 Layer (type)                   Output Shape         Param #     Connected to
==================================================================================================
 input_1 (InputLayer)           [(None, 100)]        0           []

 sequential (Sequential)        (None, 28, 28, 1)    247440      ['input_1[0][0]']

 sequential_1 (Sequential)      (None, 1)            201217      ['sequential[0][0]']

 sequential_2 (Sequential)      (None, 10)           14218       ['input_1[0][0]']

==================================================================================================
Total params: 462,875
Trainable params: 462,875
Non-trainable params: 0

结论

使用 Keras 和 TensorFlow 构建辅助 GAN 为数据生成任务打开了激动人心的可能性。辅助分类器的加入增强了数据控制和多样性,使 ACGAN 成为各种应用中的宝贵工具。通过遵循本文提供的分步指南,您可以开始创建自己的辅助 GAN 并探索生成模型的创造潜力。

更新于: 2023年7月11日

131 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告