[深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇
[深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇
相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較長一點。
Python version: 3.11.3
NumPy version: 1.24.2
Matplotlib version: 3.7.1
tensorflow version: 2.13.0
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
from keras.models import load_model
# 繪製生成圖像用
def plot_multiple_images (images, n=None):
#判斷最后一維度若為 1,則消去最后一維度
if images.shape [-1] == 1:
images = np. squeeze (images, axis=-1)
plt.figure(figsize=(n, 2))
for i in range(n):
plt.subplot(1, int(n/2), i + 1)
plt. imshow (images [i], cmap="binary")
plt.axis ("off")
plt.show ()
# 載入模型
generator = load_model('模型路徑') #載入訓練好的模型 .H5
# 設置隨機種子
tf.random.set_seed (1)
np.random.seed (1)
# 生成噪聲
d = 30 # d 是生成器輸入的維度。這些噪聲將作為生成器的輸入,用於生成圖像。
# 30 MLP 100 CNN
noise = tf. random. normal (shape= [10, d]) # 生成一個形狀為 [10, d] 的隨機噪聲張量
# 使用生成器生成圖像
generated_images = generator (noise)
# 顯示生成的圖像
plot_multiple_images (generated_images, 10)
在生成對抗網絡(GAN)中,生成器的輸入維度 d 通常被稱為「潛在空間」或「隱變數空間」的維度。這個潛在空間的向量被稱為「隱變數」或「編碼」(coding)。
生成器的輸入維度 ddd 是指生成器所接受的輸入向量的長度。這個向量是從一個高斯分佈(通常是標準正態分佈)中隨機生成的數據。生成器會將這個隨機向量轉換為一個有意義的數據樣本,例如一張圖片。
Coding數量就是指生成器輸入向量的元素個數。例如,如果 d=30d = 30d=30,這意味著生成器的每個輸入向量都是一個有30個元素的向量。這些隨機生成的向量會通過生成器轉換為新的數據樣本。