我对GAN感兴趣,因此我遵循了有关Keras的MNIST的本教程link。结果是它生成了一个具有this之类的随机数字的4x4图像。我想问一下如何用所需的数字而不是像this这样的随机数字生成4x4图像。
def plot_generated_images(epoch, generator, examples=16, dim=(4, 4), figsize=(4, 4)):
noise = np.random.normal(0, 1, size=[examples, random_dim])
generated_images = generator.predict(noise)
generated_images = generated_images.reshape(examples, 28, 28)
plt.figure(figsize=figsize)
for i in range(generated_images.shape[0]):
plt.subplot(dim[0], dim[1], i+1)
plt.imshow(generated_images[i], interpolation='nearest', cmap='gray_r')
plt.axis('off')
plt.tight_layout()
plt.savefig('gan_generated_image_epoch_%d.png' % epoch)
答案 0 :(得分:0)
您使用的GAN类型无法控制它生成的数字。为此,您需要训练Conditional GAN。
唯一的意思是您必须控制 GAN生成的图像是通过输入到生成器的噪声矢量。您可以尝试更改此向量的值,直到获得所需的数字为止。
最简单的方法是通过随机种子
np.random.seed(13) # changing this number will result in different digits being created
noise = np.random.normal(0, 1, size=[examples, random_dim])
generated_images = generator.predict(noise)
generated_images = generated_images.reshape(examples, 28, 28)
答案 1 :(得分:0)
另一种方法是过滤训练数据,例如
let state = { StateGranted.Status = status; Msg = msg }
然后根据滤波后的数据和噪声训练GAN模型。由于鉴别器仅将其分类为假或真,因此如果仅使用特定的数字标签进行训练就可以了。
通过对每个数字重复10次,您可以生成所需的数字。 但是请记住,训练数据的大小减小了,历时需要同时增加。
我尝试通过使用基本GAN体系结构给定from tensorflow.keras.datasets import mnist
# Set specific target digit you want to generator
TARGET_DIGIT = 5
# Get data
(trainX, trainy), (testX, testy) = mnist.load_data()
# Filter it
trainX, trainy = trainX[trainy==TARGET_DIGIT], trainy[trainy==TARGET_DIGIT]
和epochs = 300
来将目标数字设置为5。这是在epoch = 150时生成器的绘图:;和epoch = 300: