An object oriented neural network implementation.
Project description
Neural-pleX
An object oriented neural network implementation.
Introduction
Neural-pleX is an intuitive object oriented neural network implementation. The Neural-pleX API consists of Network, Layer, and Neuron constructors. The networks can be easily visualized using a visualization library.
Table of Contents
Installation
pip install neuralplex
Usage
This implementation demonstrates each component of the API. A 3 layer neural network is constructed that has a 4 neuron input Layer and a 1 neuron output layer. The hidden layer has 8 neurons.
Instructions
Import the Network, Layer, and Neuron classes.
from neuralplex import Network, Layer, Neuron
Set a step.
STEP = 1e-4
Construct a neural network by specifying the Neurons for each Layer and adding the Layers to a Network. The resulting neural network will have 4 inputs and 1 ouput.
l1 = Layer(neurons=[Neuron(m=random()) for i in range(0, 4)], step=STEP)
l2 = Layer(neurons=[Neuron(m=random()) for i in range(0, 8)], step=STEP)
l3 = Layer(neurons=[Neuron(m=random())], step=STEP)
n1 = Network([l1, l2, l3])
With the Network define, you can train the network. Here the network is trained to recognize the nibble 1111 as the decimal number 15.
n1.train([1,1,1,1], [15])
You can generate and print a prediction using the predict method. Because the network underwent just one iteration of training, the estimate will likely be inaccurate. The accuracy of the prediction can be improved by iteratively training the network. Please see the Train and Visualize a Neural-pleX Network implementation for an example of how to iteratively train the network.
prediction = n1.predict([1,1,1,1])
print(prediction)
Examples
Train and Visualize a Neural-pleX Network
In this example you will use D3 and D3Blocks in order to visualize a neural network before and after training.
Import the necessary dependencies.
from random import random, randint
import pandas as pd
from neuralplex import Network, Layer, Neuron, get_edge_data
from d3blocks import D3Blocks
Implement a function that will visualize the network.
def visualize(n):
d3 = D3Blocks()
df = pd.DataFrame(get_edge_data(n))
df['weight'] = df['weight'] * 42
d3.d3graph(df, charge=1e4, filepath=None)
for index, source, target, weight in df.to_records():
if source.startswith('l1'):
color = 'green'
elif source.startswith('l2'):
color = 'red'
else:
color='yellow'
d3.D3graph.node_properties[source]['color'] = color
d3.D3graph.node_properties[source]['size'] = weight
d3.D3graph.show(save_button=True, filepath='./Neural-pleX.html')
Set a step.
STEP = 1e-5
Construct a network.
n = Network([Layer(neurons=[Neuron(m=random(), name=f'l{layer}-p{i}') for i in range(1, size+1)], step=STEP) for layer, size in zip([1,2,3], [4, 8, 1])])
Use D3 and D3Blocks in order to visualize the network before training.
visualize(n)
Train the network.
for i in range(0, int(1e5)):
rn = randint(1, 15)
b = [int(n) for n in bin(rn)[2:]]
while len(b) < 4:
b = [0] + b
n.train(b, [rn])
Use D3 and D3Blocks in order to visualize the network after training.
visualize(n)
Visualizations of the network before and after training:
The green nodes comprise the inputs, the red nodes comprise the hidden layer, and the yellow node is the output. The size of the Neuron is proportional to its coefficient and dependent on its random initialization and subsequent training.
| Before Training | After Training |
|---|---|
Tests
The Nibble Challenge
Clone the repository and run the test.
A model is trained that estimates a decimal value given a binary nibble.
Clone the repository.
git clone https://github.com/faranalytics/neuralplex.git
Change directory into the repository.
cd neuralplex
Install the package in editable mode.
pip install -e .
Run the tests.
python -m unittest -v
Output
test_nibbles (tests.test.Test.test_nibbles) ... Training the model.
Training iteration: 0
Training iteration: 1000
Training iteration: 2000
Training iteration: 3000
Training iteration: 4000
Training iteration: 5000
Training iteration: 6000
Training iteration: 7000
Training iteration: 8000
Training iteration: 9000
1 input: [0, 0, 0, 1], truth: 1 prediction: [1.8160007977374275]
2 input: [0, 0, 1, 0], truth: 2 prediction: [2.768211299141504]
3 input: [0, 0, 1, 1], truth: 3 prediction: [4.584212096878932]
4 input: [0, 1, 0, 0], truth: 4 prediction: [3.772563194981495]
5 input: [0, 1, 0, 1], truth: 5 prediction: [5.588563992718923]
6 input: [0, 1, 1, 0], truth: 6 prediction: [6.540774494122998]
7 input: [0, 1, 1, 1], truth: 7 prediction: [8.356775291860426]
8 input: [1, 0, 0, 0], truth: 8 prediction: [6.784403350226391]
9 input: [1, 0, 0, 1], truth: 9 prediction: [8.600404147963818]
10 input: [1, 0, 1, 0], truth: 10 prediction: [9.552614649367897]
11 input: [1, 0, 1, 1], truth: 11 prediction: [11.368615447105324]
12 input: [1, 1, 0, 0], truth: 12 prediction: [10.556966545207885]
13 input: [1, 1, 0, 1], truth: 13 prediction: [12.372967342945314]
14 input: [1, 1, 1, 0], truth: 14 prediction: [13.32517784434939]
15 input: [1, 1, 1, 1], truth: 15 prediction: [15.141178642086818]
R2: 0.9599237139109126
ok
----------------------------------------------------------------------
Ran 1 test in 0.333s
OK
Support
If you have a feature request or run into any issues, feel free to submit an issue or start a discussion. You’re also welcome to reach out directly to one of the authors at any time.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neuralplex-0.1.0.tar.gz.
File metadata
- Download URL: neuralplex-0.1.0.tar.gz
- Upload date:
- Size: 179.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2f16322b2906e0e8003c0c008ebab616194446646bff17eca3eac6f0d507a3d
|
|
| MD5 |
032af499fccdf739ad2882250b95e1d7
|
|
| BLAKE2b-256 |
92da63dc199f85698a52ccd04beebbfb5d5497e57838f0171ef4b49e9ec52188
|
File details
Details for the file neuralplex-0.1.0-py3-none-any.whl.
File metadata
- Download URL: neuralplex-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97dca103817f65df0e5a78a38d7b1df2a23ddfed8ac4bfb2098785f77d7f6dc3
|
|
| MD5 |
cc12c453916a76c4d56f643e2e51b61d
|
|
| BLAKE2b-256 |
cf1d725f84a392a2c48b34be98654cb8cf1a6e1d1913ef8c29bc53fc71f8b1c2
|