5 ms·
How to build your own neural network from scratch in Python
- wheresvic1 8y agoIf you're looking for a similar from scratch tutorial in Java, check this one out: https://smalldata.tech/blog/2016/05/03/building-a-simple-neural-net-in-java https://smalldata.tech/blog/2016/05/03/building-a-simple-neu...
- a_bonobo 8y agoToo often you see articles like this and they start with $ import a_whole_bunch_of_stuff Good to see that this is not the case here :) The fast.ai course has a similar exercise in the beginning, but you'll still import the weights from somewhere else. Their fast.ai v1 library has a very short implementation too (loading the MINIST example dataset and then using Resnet18): from fastai import * from fastai.data import * untar_data(MNIST_PATH) data = image_data_from_folder(MNIST_PATH) learn = ConvLearner(data, tvm.resnet18, metrics=accuracy) learn.fit(1) Done! Source: http://docs.fast.ai/ http://docs.fast.ai/
- partycoder 8y agoHow to make cake, by Russell Peters First, you get cake. Then you make it for 20 minutes. Then you have cake.
- amelius 8y agoStep 1. Write function that evaluates cake. Step 2. Use genetic algorithm to bake perfect cake.
- sprobertson 8y agoHow is your example not "$ import a_whole_bunch_of_stuff"?
- a_bonobo 8y agoshould've been more explicit - deleted that part accidentally in an early edit, but yeah, that's what I would've expected, an 'import from' at the beginning
- ScoutOrgo 8y agoThis notebook from fast.ai is more in line with what op mentioned. It starts from nothing but Python and slowly swaps out chunks of code with functions/classes from Torch/fastai: https://github.com/fastai/fastai/tree/master/courses/dl1 https://github.com/fastai/fastai/tree/master/courses/dl1
- MrUnderBridje 8y agoYou always have to start somewhere.
- deleted 8y ago[deleted]
- ShorsHammer 8y agoIt's not mentioned in the article but he is importing numpy. It has around 100k LOC.
- halflings 8y agonumpy is considered a low-level backbone of data science on Python; re-writing it would be equivalent to re-writing the "print" function. OP is probably referring to somebody importing a high-level class that does something complex (auto-differentiation etc.)
- deleted 8y ago[deleted]
- MrUnderBridje 8y agoYou always have to start somewhere. Do you want to code all the OS from the ground up, or do you have minimal expectations about the environment your software will run on? Do you want to look at all the tiny details, or do you wish to focus on a specific aspect of the problem? The article author could also give an explanation of linear algebra, but I guess he expects the reader to be familiar with this part of the problem. I guess that there's always a software layer which may be considered "backbone". For people designing networks, all the tedious work of building the network is just plumbing, and they probably expect it to be automated from a formal description of the network.
- FartyMcFarter 8y ago> I guess that there's always a software layer which may be considered "backbone". The point is that you don't need any software layers at all to code up a basic neural network implementation. A programming language with basic floating-point operations is all you need. The algorithms are not complicated so even x86 Assembly is practical for this purpose if you're already experienced with it. So the "backbone" can simply be your favorite compiler. > Do you want to code all the OS from the ground up If it's a "make your OS" course then yes - a simple OS of course. If you want to become experienced in compilers, then writing a compiler from scratch for a simple language is mandatory for people who want to have solid fundamentals. It's not a coincidence that projects like these are common in Computer Science and Software Engineering courses.
- MrUnderBridje 8y ago> The point is that you don't need any software layers at all to code up a basic neural network implementation. I grafted my answer to the wrong post, I meant to respond to the guy talking about the project implicitely using Numpy. Offtopic remark: It would be nice to be able to move a post to a different thread, or make a single answer to several messages.
- mos_basik 8y ago>single answer to several messages Always surprises me that out of all the different kinds of internet communities, it's only the oft-maligned imageboards that consistently provide that feature. I was kind of expecting Discourse to play with the idea, since they seem to be the modern-reboot-of-forums with the most traction + willingness to experiment, but they haven't so far, afaik.
- zodPod 8y agoThere's a guy who makes youtube videos like this a lot. He's a good guy and a smart guy but seems to either not care or not realize he isn't helping. I've seen videos like "Computer Vision In 5 lines" where the first line is "import helperclass.py" or something like that and that helper class has like 1500 lines of code that he wrote to implement. Sure people need to be aware of what they're learning but if someone has no programming experience and finds that video they're going to just think it's magic.
- tomglynch 8y agoTowards Data Science is definitely one of the best Medium Publications. I hope they don't begin to monetise with Medium's member-only content. It's such a drawback to Medium.
- bluemania 8y agoThanks for submitting, this is going to come in handy for my education! I have an assignment next week which requires creating a neural network, then substituting various optimizers in place of backpropagation and comparing performance over iterations. Have found that simple numpy based NN's are easier to examine and connect the changes with the theory, this guide looks to help further with this understanding!
- dnautics 8y agoThat sounds really fun! Do you get to pick optimizers? Obviously direct gradient is a thing (calculate the partial for every parameter) but also particle swarm optimization might be cool to profile.
- starpilot 8y agoAnother thing to try is calculating backpropagation by hand, on paper, with a small NN. This is what my mentor said his final exam on NN in college involved.
- anonytrary 8y agoI would have thought calculus 1 was a prerequisite for that course.
- deleted 8y ago[deleted]
- drej 8y agoI can highly recommend Joel Grus’ live coding video. He creates a deep learning library only using numpy in an hour and it’s really fun to watch it all come together. https://youtu.be/o64FV-ez6Gw https://youtu.be/o64FV-ez6Gw
- lunchladydoris 8y agoThat was really good! Thanks for the link.
- vesche 8y agoNah, let's make that 10 lines: https://gist.github.com/vesche/72dafed33d614710f03f1b75cff1c807 https://gist.github.com/vesche/72dafed33d614710f03f1b75cff1c... I got a beer for anyone who can golf it under 5 lines
- anonytrary 8y agoNot readable, doesn't count ;)
- applecrazy 8y agoNaive solution (1 line): https://gist.github.com/applecrazy/deda2fac6e83c07b93e0017314de6cce https://gist.github.com/applecrazy/deda2fac6e83c07b93e001731... Edit: I literally took newlines, converted to \n in a string, and then exec()ed the whole thing. Here's a repl of it working: https://repl.it/@applecrazy/Code-Golfing-a-Neural-Net https://repl.it/@applecrazy/Code-Golfing-a-Neural-Net
- vesche 8y agoOh dear, I got played. PM address if you want the beer, you sly dog. Obligatory, I'm a normal dude: http://vesche.github.io/ http://vesche.github.io/ Edit: Wait, you can't PM on here... PM on reddit /u/vesche
- applecrazy 8y agoWell, I don't drink (see my bio), but thanks for the offer. :P
- rjplatte 8y agoI will accept the beer in his stead.
- earenndil 8y agoSure! Optimizing for number of lines (instead of number of characters): * Remove 'import numpy as n' and use __import__('numpy') in place of it everywhere * Remove s and d functions; inline them where they're called * Get rid of 'class N', as it's unnecessary. If adding globals is cheating, then you can do '__import__('math').x = x' instead of 'self.x = x' (yes this will work and persist). * Technically, you don't have to print the result at the end Where do I go for my beer?
- amasad 8y agoVery cool! Here's the full version if you want fo run it/play with it https://repl.it/@turbio/neural-network https://repl.it/@turbio/neural-network
- derekmcloughlin 8y agoI found this very useful: https://makeyourownneuralnetwork.blogspot.com/ https://makeyourownneuralnetwork.blogspot.com/ https://www.amazon.com/dp/1530826608/ref=cm_sw_r_tw_dp_U_x_xmXTBbB5R5A2R https://www.amazon.com/dp/1530826608/ref=cm_sw_r_tw_dp_U_x_x... First part goes into what a NN is and how backprop works, second part is an implementation in Python.
- maurits 8y agoAlmost obligatory, but Stanford cs231n [1] lets you implement a complete (deep) neural network from scratch [2] before venturing into pytorch/tf. Its super fun. [1] http://cs231n.stanford.edu/ http://cs231n.stanford.edu/ [2] http://cs231n.github.io/assignments2017/assignment1/ http://cs231n.github.io/assignments2017/assignment1/
- peter303 8y agoI suggest a remarkably useful device: Four circular disks when attached to a cart make it easy to move the cart from location to another. Furthermore you could put goods in that cart and move them too. A lot easier than carrying the goods on you back or an animal. A brief search of the internet finds this is a new idea.
- qbrass 8y agoWhat do the disks do? A cart already moves pretty easily on it's wheels, so how much improvement have you made by attaching these disks to it?
- plg 8y agoHonest question: what are the reasons to code this up using OOP, creating a neural network object plus methods, instead of data structures and functions that operate on them? If it’s just personal preference, I’m fine with that, I’m not trying to start a flame war.
- claytonjy 8y agoPython, both the language and community, are very strong proponents of OOP. While you can do a lot of more functional stuff, esp. w/ functools, the community at large tends to discourage that. "Never use map/filter" is a weirdly common phrase among pythonistas. So this, like most python-driven examples, is doing things in a pythonic way. Coming from the R side, I tend to prefer structures & functions as well, but if I tried to write Python that way I'd be wary about showing that code to anyone more entrenched in the Pythonic way of thinking.
- jononor 8y agoThe never use map/filter is in favor of list comprehensions, which is not really a OOP construct. But sure, it's a conventional thing. And for a long time the built-in alternatives to a class for such a datastructure tuples and dicts, neither which are very nice for functions to operate on (dict values have to be addressed with d['key'] instead of d.key). With a class and method there is also no doubt as to what the function operates on, which is convenient when there type hints and IDE support is missing. This is changing since Python 3.5 and type checking tools like MyPy. Since Python 3.7 there are also data classes, a primitive for classes which just hold values. https://www.linuxjournal.com/content/introducing-python-37s-dataclasses https://www.linuxjournal.com/content/introducing-python-37s-... But it will take a while before programming conventions change.
- master_yoda_1 8y agoThis is not as glorified as it sound. 100 of thousands of students around the world build neural net from scratch as their homework. People please move on, spend your time somewhere else which is more productive. I coded neural network using c++ in 2009 as homework. But I never though about showing this to people.
- tobr 8y ago> People please move on Strange reaction to a “beginner’s guide”, how can someone move on before they learn the basics?
- deytempo 8y agoProgramming != math