21 comments

[ 2.7 ms ] story [ 57.8 ms ] thread
Amazing, I was looking to do something very similar for myself-- dig into pytorch library to see how everything was working.
There is also the book Deep Learning from Scratch.
Are there any resources that use languages other than python? I would prefer to work with code examples in a language that I might actually use.
If you're doing machine learning, python is a very viable language to actually use.
Not to me it isn’t.
No! You must respect the Python ML monoculture! Now hand me my set of MNIST digit images!
Almost all neural network frameworks are Python based, so you're severely limiting yourself here.
> that I might actually use

The only language that you might actually use is Python.

“from scratch” == “using numpy and numba”
If you wish to implement the Torch API from scratch, you must first invent the universe. (Apologies to Sagan)
"from scratch" in this context does not make any sense - Pytorch is already implemented "from scratch" using Python, C++, and CUDA. Implementing Pytorch using Numpy is the opposite of "from scratch".
I didn't dig too deeply, however on the pytorch installation page, it says "Please ensure that you have met the prerequisites below (e.g., numpy)"

Does pytorch already require numpy?

It does, because it can convert a numpy array to a pytorch tensor and back, but I don’t think numpy is used for anything else.
They must be doing something else with numpy as Python has a generic API, that allows direct access to data of numpy array-like structures: Buffer Protocol https://docs.python.org/3/c-api/buffer.html
It’s not just about access to underlying data - users might want to import from, or export to numpy array (e.g. for visualization, etc).
Buffer protocol means PyTorch can have a torch.tensor method, that can create a tensor of anything implementing this protocol (which NumPy arrays do), and likewise numpy.array can be constructed out of PyTorch array because PyTorch Tensor implements this protocol. E.g. they don't need to know about each other (so no dependency), only about the protocol.
This material is focused on teaching how to develop a Deep Learning library, and not teaching Deep Learning through implementing things from scratch.

If that's what you want, then there are:

- Data Science from Scratch

- Deep Learning from Scratch

It's totally fine if you want to implement a DL library using Numpy. Just don't call it "from scratch". Especially if you say "in pure Python". Numpy is just as "pure Python" as Pytorch, so this does not make much sense.
This is focused on API Design. Not on developing a DL library from scratch.