我有我试图分类的长而稀疏的 1_D 向量序列(3000 个数字,由 0 和 1 组成)。我之前已经实现了一个简单的 CNN 以相对成功地对它们进行分类(使用 keras)。
data:
label, sequence
0,0000000000010000000......
....
1,00000000000000000001........
我正在尝试创建一个 GAN,它返回一个序列,该序列是具有“1”标签的序列的象征。
我试图在我的一维数据上重新实现二维张量(即图像)的典型分析。
到目前为止,我已经设法获得了创建与原始向量相似的“假”向量的功能代码......但是我的问题是我不知道如何评估足够数量的时代......有人建议我评估测试数据的性能可能是一个很好的指标。因此,作为 GAN 训练正常过程的一项单独任务,我还评估了生成器在每个 epoch 中对测试数据的性能。
见左上图我已经绘制了生成器和鉴别器的损失曲线,在右上角我绘制了在验证测试数据时在每个时期实现的准确度,底部三张图是不同的示例序列输出训练阶段(用箭头表示)。
我使用的代码与以下链接中的代码非常相似:https ://github.com/osh/KerasGAN/blob/master/MNIST_CNN_GAN.ipynb
(如果需要实际代码,请在下面评论,我会包括在内)。
请参阅下面的另一个示例输出(来自不同的任务):
在这里,生成器似乎过度拟合并生成了所有 0 序列——这是不可取的。为了缓解这种情况,我训练鉴别器在冻结其权重并启动 GAN 之前拒绝所有 0 序列:
discriminator=load_model('..discriminator..')
X_filler,y_filler=np.zeros((100,3000, 1)),np.zeros(100)
discriminator.fit(X_filler,y_filler,epochs=3,batch_size=100)
discriminator.trainable = False
......initiate GAN training....
仍然在这样做之后,上面显示的问题仍然存在..
我找不到关于何时停止训练的好建议。以下来源建议:
停止标准:Generator 的失败次数(试图欺骗 Discriminator 失败)[几乎] 等于 Discriminator 区分人工生成的样本和真实样本的错误。
但是我不确定如何根据上面显示的测试精度图来评估何时发生这种情况。
总的来说,我的问题是:
1. 基于测试验证,我可以知道什么时候在每个 epoch 中完成,什么时候停止训练 GAN?
2. 我怎么知道我的生成器是否过拟合,我能做些什么来缓解这种情况?

