我们知道普通的模型都是搭好架构,然后定义好loss,直接扔给优化器训练就行了。但是GAN不一样,一般来说它涉及有两个不同的loss,这两个loss需要交替优化。现在主流的方案是判别器和生成器都按照1:1的次数交替训练(各训练一次,必要时可以给两者设置不同的学习率,即TTUR),交替优化就意味我们需要传入两次数据(从内存传到显存)、执行两次前向传播和反向传播。 如果我们能把这两步合并起来,作为一步去优化,那么肯定能节省时间的,这也就是GAN的同步训练。 (注:本文不是介绍新的GAN,而是介绍GAN的新写法,这只是一道编程题,不是一道算法题~) 如果在TF中 # 如果是在tensorflow中,实现同步训练并不困难,因为我们定义好了判别器和生成器的训练算子了(假设为 D_solver 和 G_solver ),那么直接执行 sess.run([D_solver, G_solver], feed_dict={x_in: x_train, z_in: z_train}) 就行了。这建立在我们能分别获取判别器和生成器的参数、能直接操作 sess.run 的基础上。 更通用的方法 # 但是如果是Keras呢?Keras中已经把流程封装好了,一般来说我们没法去操作得如此精细。所以,下面我们介绍一个通用的技巧,只需要定义单一一个loss,然后扔给优化器,就能够实现GAN的训练。同时,从这个技巧中