使用 TensorFlow 和生成对抗网络 (GAN) 进行图像生成

生成对抗网络 (GANs) 通过从随机噪声中创建逼真且高质量的图像,彻底变革了 AI 图像生成领域。在本文中,我们将在 MNIST 数据集上训练一个 GAN 模型,以生成手写数字图像。

训练 GAN 进行图像生成

生成对抗网络 (GANs) 由两个相互竞争的神经网络组成:生成器和判别器。生成器负责从随机噪声创建图像,而判别器负责评估图像以将其分类为“真实”或“虚假”,这导致生成样本的质量不断提高。

训练判别器

判别器首先在包含真实图像的数据集上进行训练。其目标是区分这些真实图像和由生成器生成的虚假图像。通过反向传播梯度下降,它调整其参数以提高其准确分类真实图像和生成图像的能力。

训练生成器

与此同时,生成器接受训练以生成越来越难以被判别器区分于真实图像的图像。最初,它生成随机噪声,但随着训练的进行,它学会生成类似于训练数据集中的图像。生成器的参数根据判别器的反馈进行调整,这有助于优化生成器创建更逼真和高质量图像的能力。

实现生成对抗网络 (GAN) 进行图像生成

让我们看看此实现中涉及的各个步骤。

步骤 1:导入必要的库并加载数据集

我们将使用 TensorFlowKerasNumPyMatplotlib

Python


CODEBLOCK_3ae6d6bc

步骤 2:数据集准备

通过将图像重塑为所需格式并将像素值归一化到 [0,1] 范围来准备 MNIST 数据。归一化有助于通过将输入值保持在小范围内来稳定训练。

Python


CODEBLOCK_da9f1fd9

步骤 3:构建模型

使用专为高效处理和生成图像而设计的 卷积神经网络 (CNNs) 来定义生成器和判别器的架构。

#### 带有 CNN 层的生成器模型:

  • 全连接层: 将 100 维的噪声向量转换为高维特征图。
  • Reshape(重塑): 将特征图转换为适合卷积处理的 3D 张量。
  • Conv2DTranspose(转置卷积)层: 同时执行上采样和卷积,有助于逐渐增加图像分辨率。
  • BatchNormalization(批归一化): 稳定训练并加速收敛。
  • 激活函数: 隐藏层使用 ReLU,输出层使用 sigmoid 将像素值限制在 0 和 1 之间。

带有 CNN 层的判别器模型

  • Conv2D(卷积)层: 应用步幅为 2 的卷积来对图像进行下采样,有助于降低维度并增加感受野。
  • BatchNormalization(批归一化): 有助于维持稳定的训练。
  • Flatten(扁平化): 将特征图转换为一维向量以进行分类。
  • 全连接输出层: 输出单个概率,指示图像是真实还是虚假。

Python


CODEBLOCK_0575b0f9

步骤 4:编译模型

通过连接生成器和判别器来编译 GAN。在生成器训练期间,判别器的权重被冻结以防止更新。

  • discriminatorcnn.compile(optimizer=tf.keras.optimizers.Adam(learningrate=0.01), loss=‘binary_crossentropy‘, metrics=[‘accuracy‘]): 编译判别
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43479.html
点赞
0.00 平均评分 (0% 分数) - 0