https://towardsdatascience.com/on-implementing-deep-learning-library-from-scratch-in-python-c93c942710a8