After reading the ICLR 2017 submitted paper _unrolled generative adversarial networks_ in http://104.155.136.4:3000/pdf?id=BydrOIcle, I'm curious about this technique for addressing the problem of mode collapse when training GAN models.
The key idea is that we could update the generator after several simulative updating of discriminator, while the discriminator uses the original parameter before these simulations to complete updates.
At first sight, I think of the recurrent process using theano.scan(). However, since the parameters are theano.shared, how could we simulate one subset of them recurrently to update the others while keep the original subset being kept for another use?
Any ideas? Thanks !
I was testing out unrolled GANs in straight theano but I would definitely prefer to do so in Keras. I'm thinking you could do an unrolled GAN in Keras using theano.clone and replace. Use Keras to make the graph, then clone it replacing shared variables with updates. Seems tricky but doable. https://gist.github.com/kastnerkyle/29be76e78adaebaa2b69
Just got Keras unrolled GANs working in theano and tensorflow. Warning: compiling will crush your RAM.
https://github.com/bstriner/keras_adversarial
Basic idea is to get discriminator and generator updates, and substitute discriminator updates into generator updates k times.
This is the core code, but there is a lot more to integrate with Keras if you just browse the repo.
replace = {k:v for k,v in dupdates}
updates_t = gupdates
for i in range(depth):
updates_t = [(k, theano.clone(v, replace)) for k, v in updates_t]
return updates_t
Most helpful comment
Just got Keras unrolled GANs working in theano and tensorflow. Warning: compiling will crush your RAM.
https://github.com/bstriner/keras_adversarial
Basic idea is to get discriminator and generator updates, and substitute discriminator updates into generator updates k times.
This is the core code, but there is a lot more to integrate with Keras if you just browse the repo.