在Keras中训练GAN时,是否需要多次通过才能优化生成器和鉴别器?

Dav*_*rks 9 python keras tensorflow

我比Keras更熟悉张量流图训练,但是我在这里尝试Keras。

在构建GAN时,需要优化发电机,使其免受与鉴别器不同的损耗(相反的损耗)的影响。在基本张量流中,这很容易使用两个优化器或通过调用optimizer.compute_gradients(...)optimizer.apply_gradients(...)分别使用适当的权重组来实现。

在Keras中,我看不到我可以实现这两个目标。在诸如Keras-GAN的实现中,似乎将生成器和鉴别器的训练划分为单独的模型,然后逐批地进行独立训练。这意味着每次有效更新所需的遍数要比基本tensorflow实现所需的遍数更多,而基本张量流实现需要两个优化器一起运行。

有没有一种方法可以为GAN实施优化器,以使生成器和鉴别器都可以在Keras中一次通过训练?

TF 1.14

Dan*_*ler 3

对于 Keras 来说,这是一个非常棘手的问题,原因如下:

  1. 一个模型只能有一个优化器......需要更改源代码才能接受两个或更多

  2. 即使您使用自定义优化器,也可以分离权重,但它不提供分离损失的支持,如优化器的源代码所示。概率是优化器已经计算出最终的公共损失(这将使得不可能将一个损失归因于一组权重,将另一个损失归因于另一组)

  3. 训练机制在代码中不容易找到。事物分散在各处,支持许多事物,例如损失权重、样本权重等。总结所有事物然后决定做什么/改变所花费的时间太多了。

回答建议

按照您的意愿在 Keras 中制作模型。鉴别器、生成器、它们的连接和输出。

只是不要编译它。相反,跟踪主张量(生成器输出、鉴别器输出、生成器输入),以 Tensorflow 风格创建损失函数并以张量流风格训练所有内容。