Machines are commonly thought of as cold heartless machines, incapable of creativity.
Using generative adversarial networks (GANs) machines can learn how to create their own art.
Two neural networks are pitted against each other, as enemies. One network, the generator tries to create images that will fool the other network, the discrimintator, into thinking that its creations actually real
At first the generator and discriminator are dumber than babies, but over time they both push each other to learn. Eventually their creations become indistinguishable from real images.
These faces are all created by GANs
Using PyTorch I implemented my own version of GANs that could create original images of new celebrity faces. These faces are new - before my GANs created the image, their faces never existed.
I had so much fun training my GANs to make faces, I decided to train it to create images of new cat faces.
The amazing thing about GANs is that (generally) you don't have to change anything about the GANs to create a different type of image. You only have to give it a new dataset to learn from.
Images my GANs created
At first I trained my GANs to create images of new Pokemon. The results were... not so great. Decent looking blobs of colour though.
I learned that the dataset you give the GANs, in this case images of Pokemon - each example in the dataset has to look somewhat similar, otherwise the Generator and Discriminator will be unable to learn any patters. It turns out that Pokemon don't look that similar to each other (lions, tigers, and bears - oh my!).
Then I trained my GANs to create images of dogs. The results looked like extremely mutated dogs.
It turns out I set the learning rate too high on the Discriminator. It was catching fakes too well, preventing the Generator from learning properly.
Mistakes my GANs created