A library written using Go. The library allows users to create a neural network with a configurable number of neurons and layers.
The library also implements backpropgation using gradient descent to gradually reduce the cost function.
I tested the neural network library against the MNIST database: http://yann.lecun.com/exdb/mnist/, a list of handwritten digits.
I went through the MNIST dataset using the GoMNIST package: https://github.com/petar/GoMNIST
Lastly, I also implemented a graphical user design so that users could draw digits themselves, and test it against the neural network.
This was done using the ebitengine graphical library https://ebitengine.org/
A feeling of wanting to learn how to use Go, and understand more about the intuition about neural networks.
Implementing backpropagation was especially difficult, (but rewarding!) as it required me to really understand how it works
Overall, it was a good project for an introduction to neural networks, and I hope to develop it further in the future!
Go - v1.18
ebiten, ebitengine - v2.4.4
GoMNIST - v0.0.0-20150320212226-2fbe10d0fa63
I plan to add some optimisers, to make it faster such as optimising matrix multiplication for caching, concurrent computation, or SIMD. I could utilise some optimsers for gradient descent such as RMSProp and Adam too.
Furthermore, I plan on augmenting it to make it a convolutional neural network. However, I might redo the project in Rust instead for that.