我正在尝试比较我从 GAN(生成的对抗网络)生成的样本(即 MNIST 数字图像)。 对于我的第一个实验,GAN 训练不成功,因此生成的样本与真实的 MNIST 图像不相似。 对于我的第二个实验,GAN 训练非常成功,因此生成的样本应该与可视化图中的真实 MNIST 样本很好地重叠。
上面的例子图展示了我希望达到的效果:
有人可以提供一些指导,什么是使用 Python 绘制此类内容的好方法,并使用以下代码片段作为示例数据/代码(取自here)提供一些代码来绘制?
from sklearn.manifold import TSNE
from keras.datasets import mnist
import seaborn as sns
import pandas as pd
(x_train, y_train), (_ , _) = mnist.load_data()
x_train = x_train[:3000]
y_train = y_train[:3000]
x_mnist = reshape(x_train, [x_train.shape[0], x_train.shape[1]*x_train.shape[2]])
tsne = TSNE(n_components=2, verbose=1, random_state=123)
z = tsne.fit_transform(x_mnist)
df = pd.DataFrame()
df["y"] = y_train
df["comp-1"] = z[:,0]
df["comp-2"] = z[:,1]
sns.scatterplot(x="comp-1", y="comp-2", hue=df.y.tolist(),
palette=sns.color_palette("hls", 10),
data=df).set(title="MNIST data T-SNE projection")
您可以尝试使用降维方法,如 PCA、t-SNE、LLE 或 UMAP 将图像的维度降低到 2,并按照您已经指出的方式绘制图像。
以下是 python 中的一些示例代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
X_real = ... # real images e.g. 1000 images as vectors
X_gan = ... # generated images from GAN with same shape
X = np.vstack([X_real, X_gan]) # stack matrices vertically
X_pca = PCA(n_components=50).fit_transform(X) # for high-dimensional data it's advisible to reduce the dimension first (e.g. 50) before using t-SNE
X_embedded = TSNE(n_components=2).fit_transform(X_pca)
# plot points with corresponding class and method labels
plt.scatter(...)
您可以直接使用 PCA 或上述其他方法之一代替 t-SNE。