生成对抗网络 (GANs) 通过从随机噪声中创建逼真且高质量的图像,彻底变革了 AI 图像生成领域。在本文中,我们将在 MNIST 数据集上训练一个 GAN 模型,以生成手写数字图像。
训练 GAN 进行图像生成
生成对抗网络 (GANs) 由两个相互竞争的神经网络组成:生成器和判别器。生成器负责从随机噪声创建图像,而判别器负责评估图像以将其分类为“真实”或“虚假”,这导致生成样本的质量不断提高。
训练判别器
判别器首先在包含真实图像的数据集上进行训练。其目标是区分这些真实图像和由生成器生成的虚假图像。通过反向传播和梯度下降,它调整其参数以提高其准确分类真实图像和生成图像的能力。
训练生成器
与此同时,生成器接受训练以生成越来越难以被判别器区分于真实图像的图像。最初,它生成随机噪声,但随着训练的进行,它学会生成类似于训练数据集中的图像。生成器的参数根据判别器的反馈进行调整,这有助于优化生成器创建更逼真和高质量图像的能力。
实现生成对抗网络 (GAN) 进行图像生成
让我们看看此实现中涉及的各个步骤。
步骤 1:导入必要的库并加载数据集
我们将使用 TensorFlow、Keras、NumPy 和 Matplotlib。
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‘]): 编译判别