我比Keras更熟悉张量流图训练,但是我在这里尝试Keras。
在构建GAN时,需要优化发电机,使其免受与鉴别器不同的损耗(相反的损耗)的影响。在基本张量流中,这很容易使用两个优化器或通过调用optimizer.compute_gradients(...)
并optimizer.apply_gradients(...)
分别使用适当的权重组来实现。
在Keras中,我看不到我可以实现这两个目标。在诸如Keras-GAN的实现中,似乎将生成器和鉴别器的训练划分为单独的模型,然后逐批地进行独立训练。这意味着每次有效更新所需的遍数要比基本tensorflow实现所需的遍数更多,而基本张量流实现需要两个优化器一起运行。
有没有一种方法可以为GAN实施优化器,以便生成器和鉴别器都可以在Keras中一次通过训练?
TF 1.14
对于Keras来说,这是一个非常棘手的问题,原因如下:
一个模型只能有一个优化器...有必要更改其源代码以使其接受两个或多个
即使在使用定制优化器时,也可以分离权重,但是它不能提供分离损失的支持,如优化器的源代码所示。最有可能的是,优化器已经计算出最终的常见损失(这样就不可能将一组损失归因于一组权重,而将另一损失归因于另一组权重)
在代码中不容易找到训练机制。事物散布在各处,支持诸如损失权重,样本权重等许多事物。汇总所有内容然后决定做什么/更改所需的时间太长了。
就像在Keras中制作模型一样。鉴别器,生成器,它们的连接和输出。
只是不要编译它。而是跟踪主要张量(发电机输出,鉴别器输出,发电机输入),以Tensorflow样式创建损失函数,并以tensorflow样式训练所有事物。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句