Python 在Keras中培训GAN时,是否需要多次通过以优化生成器和鉴别器?
我比Keras更熟悉tensorflow图训练,但我在这里尝试Keras 在构建GAN时,需要针对与鉴别器不同的损耗(相反的损耗)对发生器进行优化。在基本tensorflow中,使用2个优化器或调用Python 在Keras中培训GAN时,是否需要多次通过以优化生成器和鉴别器?,python,tensorflow,keras,Python,Tensorflow,Keras,我比Keras更熟悉tensorflow图训练,但我在这里尝试Keras 在构建GAN时,需要针对与鉴别器不同的损耗(相反的损耗)对发生器进行优化。在基本tensorflow中,使用2个优化器或调用优化器即可轻松实现。计算梯度(…)和优化器。使用适当的权重组分别应用梯度(…) 在凯拉斯,我看不出我能做到这两个。在诸如的实现中,似乎将生成器和鉴别器的训练分解为单独的模型,然后逐批独立训练。这意味着每次有效更新所需的过程比基本tensorflow实现(两个优化器在一个过程中运行)所需的过程多得多 是
优化器即可轻松实现。计算梯度(…)
和优化器。使用适当的权重组分别应用梯度(…)
在凯拉斯,我看不出我能做到这两个。在诸如的实现中,似乎将生成器和鉴别器的训练分解为单独的模型,然后逐批独立训练。这意味着每次有效更新所需的过程比基本tensorflow实现(两个优化器在一个过程中运行)所需的过程多得多
是否有一种方法来实现GAN的优化器,以便生成器和鉴别器在Keras中一次通过培训
TF 1.14对于Keras来说,这是一个非常棘手的问题,原因如下:
只是不要编译它。相反,跟踪主要张量(生成器输出、鉴别器输出、生成器输入),以Tensorflow样式创建损失函数,并以Tensorflow样式训练所有内容。是否可以在TF中提供(或指向)一个使用
优化器实现GAN的示例。计算梯度(…)
和优化器。应用梯度(…)
?另外,在TF中有2个优化器与在Keras中将GAN拆分为单独的模型有什么不同?(我不熟悉TF实现)主要的性能差异是在使用两个模型时需要进行两次前向传递计算。此外,在Keras中,您必须使用批量训练
,它不支持任何奇特的分布式模式训练,因此Keras的附加值正在减少。我没有完整的实现示例,但这里有一个小代码段,我将单个更新与组合更新进行了比较(与您的问题有点类似,我在这里测试了一个多任务模型,这可能是一个有用的代码段,用于说明TF base中的一步渐变更新):您使用的是什么?这两个损失函数都通过鉴别器了吗?我没有指定GAN,因为我正在构建的模型是自动编码器和GAN组件的组合,我想让问题保持简单,但我正在处理的增加的复杂性只会加剧我对重复计算的担忧。但是你可以考虑InfoGAN的问题,它离我正在做的不远。是的,发电机损耗必须通过鉴别器(我实际上没有意识到存在一个不以这种方式运行的架构?)。我的建议是:按照您的意愿构建Keras模型(但不要编译它们)。以tensorflow方式创建损失,并使用tensorflow优化器进行培训。