Spectral Normalization for Keras
================================
The **simple** Keras implementation of ICLR 2018 paper, Spectral Normalization for Generative Adversarial Networks.
[[openreview]](https://openreview.net/forum?id=B1QRgziT-)[[arixiv]](https://arxiv.org/abs/1802.05957)[[original code(chainer)]](https://github.com/pfnet-research/sngan_projection)
[[Hackmd]](https://hackmd.io/s/BkW34Lje7#)[[github]](https://github.com/IShengFang/SpectralNormalizationKeras)
Result
-----------------------------
### CIFAR10
#### DCGAN architecture
| 10epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 100epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 200epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 300epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 400epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 500epoch | with SN |without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| Loss | with SN |without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
#### ResNet architecture
| 10epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 100epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 200epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 300epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 400epoch | With SN |Without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| 500epoch | with SN |without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
| Loss | with SN |without SN |
|:-------:|:-------:|:---------:|
|**With GP**|||
|**Without GP**|||
How to use?
----
1. Move SpectralNormalizationKeras.py in your dir
2. Import these layer class
``` python
from SpectralNormalizationKeras import DenseSN, ConvSN1D, ConvSN2D, ConvSN3D
```
3. Use these layers in your discriminator as usual
Example notebook
------
[CIFAR10 with DCGAN architecture](http://nbviewer.jupyter.org/github/ishengfang/SpectralNormalizationKeras/blob/master/CIFAR10%28DCGAN%29.ipynb)
[CIFAR10 with ResNet architecture](http://nbviewer.jupyter.org/github/ishengfang/SpectralNormalizationKeras/blob/master/CIFAR10%28ResNet%29.ipynb)
Model Detail
-------------------------
### Architecture
### DCGAN
#### Generator

#### Discriminator

### ResNet GAN
#### Generator

##### Generator UpSampling ResBlock

#### Dicriminator

##### Discriminator DownSampling ResBlock

##### Discriminator ResBlock

Issue
-----
- [x] Compare with WGAN-GP
- [ ] Projection Discriminator
Acknowledgment
-----
- Thank @anshkapil pointed out and @IFeelBloated corrected this implementation.