ExNeuralNetwork
A very simple implementation of a neural network in elixir with a sigmoid activation function and optionally multiple hidden layers. You can use this project for classification.
Installation
Since this module uses Matrex you have to consider its installation instruction as well.
def deps do
[
{:ex_neural_network, "~> 0.1.0"},
]
endUsage
You can use this project in your module as seen below. In addition you can see an example implementation here.
defmodule YourModule do
use ExNeuralNetwork
def init() do
# creates network with
# 3 input nodes,
# 1 hidden_layer with 10 nodes,
# 2 output nodes
# and a learning rate # of 10 %
start_link(3, [10], 2, 0.1)
end
end
iex> YourModule.train([0.5, 0.1, 1], [0.99, 0.01])
:ok
iex> YourModule.query([0.5, 0.1, 1])
[0.6072454452514648, 0.4708364009857178]
iex> YourModule.get_network()
[
[
[-0.4642568826675415, 0.32747191190719604, 0.47093304991722107],
[0.2627932131290436, 0.03314032033085823, 0.2971944808959961],
[0.3352765142917633, -0.33794283866882324, -0.2254313975572586],
[-0.006374203599989414, 0.25249508023262024, -0.43000200390815735],
[-0.12729819118976593, 0.3885648548603058, 0.24821318686008453],
[-0.00284160696901381, -0.4020627737045288, 0.4009591042995453],
[-0.02663102000951767, -0.16462339460849762, -0.476892352104187],
[0.24168038368225098, 0.007184899412095547, 0.21450108289718628],
[-0.21997787058353424, -0.454841673374176, -0.4043811857700348],
[-0.4514453411102295, -0.4835187494754791, -0.2895463705062866]
],
[
[0.36193764209747314, -0.4462336599826813, -0.4621596336364746,
0.32381609082221985, 0.3180595636367798, 0.0723995789885521,
0.12477762997150421, 0.15863820910453796, 0.23335273563861847,
0.4093025326728821],
[-0.3611955940723419, -0.024936040863394737, 0.4674941897392273,
0.011199625208973885, -0.1361985206604004, 0.20991763472557068,
-0.4904402792453766, -0.038411326706409454, 0.11535274982452393,
-0.02014654129743576]
]
]
iex> YourModule.set_network(network)
:ok
Example
(MNIST handwritten digits)
The MNIST database of handwritten digits has a training set of 60,000 examples, and a test set of 10,000 examples. This database will commonly used to test implementations of neural networks.
iex> ExNeuralNetwork.Examples.Mnist.init
{:ok, #PID<0.215.0>}
iex> for _ <- 1..5, do: ExNeuralNetwork.Examples.Mnist.train_with_file("./mnist_train.csv")
# print -> Training time in seconds: 59.283
# print -> Training time in seconds: 60.093
# print -> Training time in seconds: 59.84
# print -> Training time in seconds: 61.861
# print -> Training time in seconds: 58.918
[:ok, :ok, :ok, :ok, :ok]
iex> ExNeuralNetwork.Examples.Mnist.score_with_file("./mnist_test.csv")
# print -> Error rate in percent: 2.629999999999999 - Query time in seconds: 5.335
:ok