Isn't that lots of work, you'd ask? Let me show you how to do it with a couple dozen lines of code! I am not talking about calling a specialized deep learning framework! We'll implement everything from scratch. It will only support the classic features, but can we make it faster than the mega-frameworks? Let's see…

Implementing deep learning and neural networks from scratch is an excellent way to:

Learn the principles behind deep learning.

Learn how to implement other algorithms using vectors and matrices.

using vectors and matrices. Learn how to write simple, yet fast, number crunching software.

Learn when and how to accelerate stuff on the GPU.

Have some programming fun!

Why bother with this? There is TensorFlow by Google, there is PyTorch by Facebook, there is MxNet sponsored by Amazon, there are many other frameworks. Why not just learn these, and use the abundance of features they offer?

Well, Google, Facebook, and Amazon certainly know what they're doing. But they are solving different problems than me. If I was in competition to out-google Google, I would probably need to use a (better) TensorFlow. Most of the features TensorFlow has might be a great fit for Google, but are bloated for the challenges that smaller companies have. What is a feature for these giants is often a shackle around small team's ankles.

Additionally, you might've noticed that learning how to tame these beasts is not as easy as advertised. Tings you learn here will help you understand how these big frameworks work and how to use them optimally, even if TensorFlow and MxNet are the right tool for you. So, I guess there's no downside :)