我已经查看了一些代码/教程(教程:1和2),用于在Keras中实现GAN .
两者都进行批量培训如下:
for epoch in range(epochs):
# ---------------------
# Train Discriminator
# ---------------------
# Select a random batch of images
# Generate a batch of new images
# Train the discriminator
# ---------------------
# Train Generator
# ---------------------
在上面的代码中(取自(2)中的第92行),它们循环遍历所有时期,但是对于每个时期,仅在一个批次上进行训练 . 据我所知,对于每个时代,我们应该进行多批次训练;这样我们就可以浏览整个数据集了 . 例如,如果我们有100个样本且批量大小为10,那么对于每个时期,我们训练10个批次大小为10.为什么在此代码中,它们仅针对每个时期在单个批次上进行训练?对不起,如果这是一个基本问题;我对机器学习很陌生 .
1 回答
当你做GAN时,很少有东西会从正常的神经网络训练中改变 .
您的输入数据随着时间的推移而发展 . 来自Generator网络的人工图像在每次更新网络中的权重时都会发生变化 .
您必须同时训练两个网络 . 如果您随后更新生成器,那么在大量数据上训练鉴别器是没有意义的 . 因为这会改变鉴别器学习的数据分布 . 因此,您可能希望经常更新两个网络 . 因此,最好每批次更新两个网络 .
我不知道他们为什么称这个更新为一个时代,我想你可能不同意这个命名 . 但请记住,在修复训练数据时,时代和批次具有意义 . 在这种情况下它不是,所以也许他们只是称之为时代,因为他们没有更好的词 .