如何控制由MNIST训练的GAN生成哪个数字?

时间:2019-06-14 19:37:22

标签: python keras generative-adversarial-network

我对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)

2 个答案:

答案 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时生成器的绘图:digit 5, epoch 150;和epoch = 300:digit 5, epoch 300