PyCasCor
Description
A python implementation of a Cascade Correlation Network Simulator
Installation
Easiest Option - Install from PyPi
pip install pycascor
Using the source repository
- Clone the repository locally
git clone --recurse-submodules https://gitlab.com/cpsimpson/cascade-correlation-network-simulator.git- If you clone without the
--recurse-submodulesthe proben1 repository will not be cloned. You can pull this file after cloning with the following commandsgit submodule initandgit submodule update.
- If you clone without the
- Create and activate virtual environment
python -m venv venv. venv/bin/activate
- Install dependencies
pip install .
Usage
Example of Training on XOR
Cascade Correlation Network
from pycascor.network import CCNetwork
from pycascor.activation_functions import Sigmoid
from pycascor.trainer import Trainer
xor_inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
xor_targets = [[-0.5], [0.5], [0.5], [-0.5]]
trainer = Trainer([(8, Sigmoid())])
net = CCNetwork(2, 1, Sigmoid())
net = trainer.train_network(xor_inputs, xor_targets, net)
for x in xor_inputs:
net.full_forward_pass(x)
output_values = [node.value for node in net.output_nodes]
Small Magnitude Weight Pruning
from pycascor.network import PrunableCCNetwork
from pycascor.activation_functions import Sigmoid
from pycascor.trainer import PruneTrainer
xor_inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
xor_targets = [[-0.5], [0.5], [0.5], [-0.5]]
trainer = PruneTrainer([(8, Sigmoid())])
net = PrunableCCNetwork(2, 1, Sigmoid())
net = trainer.train_network(xor_inputs, xor_targets, net)
for x in xor_inputs:
net.full_forward_pass(x)
output_values = [node.value for node in net.output_nodes]
Optimal Brain Damage Pruning
from pycascor.network import PrunableCCNetwork
from pycascor.activation_functions import Sigmoid
from pycascor.trainer import OptimalBrainDamageTrainer
xor_inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
xor_targets = [[-0.5], [0.5], [0.5], [-0.5]]
trainer = OptimalBrainDamageTrainer([(8, Sigmoid())])
net = PrunableCCNetwork(2, 1, Sigmoid())
net = trainer.train_network(xor_inputs, xor_targets, net)
for x in xor_inputs:
net.full_forward_pass(x)
output_values = [node.value for node in net.output_nodes]
Simulator Examples
In addition to the library code pycascor, you will find an examples directory this repository.
This contains a simulator script simulation.py which is able to run multiple trials of various
datasets across the 3 versions of the network training algorithms. This includes some data which comes
from the Proben1 benchmarking dataset project originally compiled by Lutz Prechelt. A copy of the data
is linked as a submodule.
. venv/bin/activate
pip install .
python examples/simulation.py <example> <number-of-trials>
Example options: spirals, cancer, glass, xor
Various output files will be written to a result folder for your analysis.
spirals trains the networks on a subset of the two-spirals classification problem. The resulting networks are then validated and tested on the remaining points
cancer trains the networks on the "Wisconsin breast cancer database" from the UCI machine learning dataset included in the Proben1 repository.
glass trains the networks on the "glass" from the UCI machine learning dataset included in the Proben1 repository.
xor trains and tests the networks on the XOR dataset.
Support
Feel free to create an Issue or MR if you find a bug or want to add a contribution.
Contributing
Running Tests
To run the tests you can run pytest from the project root directory.
Authors and acknowledgment
This implementation is based on the code of Scott Fahlman and Thomas Shultz. Thanks to Dr. Britt Anderson, Hanbin Go, James Houle, Julia Schirmeister, Vivian DiBerardino, and Ciaran Neely for contributing to my understanding of the algorithm and inspiring this project.
License
This code and related materials is made available under the MIT License.
Project status
This is a project that I created for a directed studies course at while studying at University of Waterloo.
Release files for pycascor 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pycascor-0.1.2.tar.gz | 16.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pycascor-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.8 kB
Release files / pycascor-0.1.2.tar.gz
| Download URL | pycascor-0.1.2.tar.gz |
|---|---|
| Size | 16.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f84382718809f7cdc17e009771ce0825fcad9172836e4bf2cc328635d4ff1ca7
|
|
BLAKE2b-256 checksum How to use checksums |
bfc1408d64bb7941a01c351334890a005ca80b8c1ec779946e19dd9fe6ab5bc4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.11.7
|
Release files / pycascor-0.1.2-py3-none-any.whl
| Download URL | pycascor-0.1.2-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b94df4c2bd264d2a87ae6e7c018341908dfa50c5aecc95dc95e5bcd0a7d3f7bc
|
|
BLAKE2b-256 checksum How to use checksums |
4cb4611b6bd249c16ccffe169b151f1b525317a9466031fd7b3d68adc7fdd827
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.11.7
|