Skip to main content

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

Create a 3 Layer Neural Network

This implementation demonstrates each component of the API. A Network is constructed that has a 4 Neuron input Layer and a 1 Neuron output Layer. The hidden Layer has 8 Neurons.

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])

Implement one iteration of training.

Here the network is trained to recognize the nibble 1111 as the decimal number 15.

n1.train([1,1,1,1], [15])

Generate and print a prediction.

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 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

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.

import numpy as np
from random import random, randint
import pandas as pd
from neuralplex import Network, Layer, Neuron, get_edge_data
from d3blocks import D3Blocks

Create function that will visualize the network.

def vizualize(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 Taining After Training
Neural-pleX Before Training Neural-pleX After Training

Tests

The Nibble Challenge

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neuralplex-0.0.8.tar.gz (173.6 kB view details)

Uploaded Source

Built Distribution

neuralplex-0.0.8-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file neuralplex-0.0.8.tar.gz.

File metadata

  • Download URL: neuralplex-0.0.8.tar.gz
  • Upload date:
  • Size: 173.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.27.0

File hashes

Hashes for neuralplex-0.0.8.tar.gz
Algorithm Hash digest
SHA256 a546294ed085c73431af3f65c1bc7783ab6eedd354681dd8f6a14d83d81581bd
MD5 c090b9e539ec26ff619700eea0f57d2c
BLAKE2b-256 cc1517a659db831d2867acc714bbb757883e1e9d9e0eb7504c42b198d029d7d7

See more details on using hashes here.

File details

Details for the file neuralplex-0.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for neuralplex-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 0a6a887a967c9fd128a3261e3c74da7c164076cb7602ad70fe57a1b0bb11e268
MD5 afb0cae55d8203990610901f39fdc80c
BLAKE2b-256 238e158a48077a1ca64985ccc4e9d235ba0ed548287e483a284c9acc731c1888

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page