使用 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 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告