devtronic / legendary-mind
Easy to use neural network written in PHP
v2.1
2017-06-11 07:14 UTC
Requires
- php: >=5.6.0
- devtronic/layerless: ^1.0
Requires (Dev)
- phpunit/phpunit: ^5.6
README
Legendary Mind
Legendary Mind is an easy to use Neural Network written in PHP
- Wrapper Class For Handling The Network
- Archive And Restore Neural Networks Serialized In Text-Files
Installation
composer require devtronic/legendary-mind
Usage
Standalone Network
<?php use Devtronic\Layerless\Activator\TanHActivator; use Devtronic\LegendaryMind\Mind; require_once 'vendor/autoload.php'; // Create the topology for the net $topology = [2, 3, 1]; // Set the activator $activator = new TanHActivator(); // Instantiate the Mind $mind = new Mind($topology, $activator); // Setup XOR Lessons $lessons = [ [ [0, 0], # Inputs [0] # Outputs ], [ [0, 1], # Inputs [1] # Outputs ], [ [1, 0], # Inputs [1] # Outputs ], [ [1, 1], # Inputs [0] # Outputs ], ]; // Train the lessons $mind->train($lessons); // Setup the check lesson $test = [1, 0]; $expected = [1]; // Propagate the check lesson $mind->predict($test); // Print the Output print_r($mind->getOutput()); // Backpropagate $mind->backPropagate($expected);
With Wrapper (recommended)
<?php use Devtronic\Layerless\Activator\TanHActivator; use Devtronic\LegendaryMind\Wrapper; require_once 'vendor/autoload.php'; // Set the activator function $activator = new TanHActivator(); $wrapper = new Wrapper($hiddenNeurons = 3, $hiddenLayers = 1); // Possible input values $properties = [ 'color' => ['red', 'pink', 'blue', 'green'], 'hair_length' => ['short', 'long'] ]; $outputs = [ 'gender' => ['male', 'female'] ]; // Setup the wrapper $wrapper->initialize($properties, $outputs, $activator); // Setup the lessons $lessons = [ [ 'input' => [ 'color' => 'red', 'hair_length' => 'long', ], 'output' => [ 'gender' => 'female' ], ], [ 'input' => [ 'color' => 'blue', 'hair_length' => 'short', ], 'output' => [ 'gender' => 'male' ], ], [ 'input' => [ 'color' => 'red', 'hair_length' => 'short', ], 'output' => [ 'gender' => 'male' ], ], ]; // Train the lessons $wrapper->train($lessons); // Setup the check lesson $test_lesson = [ 'input' => [ 'color' => ['pink', 'green'], 'hair_length' => 'long', ], 'output' => [ 'gender' => 'female' ] ]; // Propagate the check lesson $wrapper->predict($test_lesson); // Print the Output print_r($wrapper->getResult()); // Backpropagate $wrapper->backPropagate($test_lesson);
Archive and restore the network (only with wrapper, Line 16 and Line 67)
<?php use Devtronic\Layerless\Activator\TanHActivator; use Devtronic\LegendaryMind\Wrapper; require_once 'vendor/autoload.php'; // Set the activation function $activator = new TanHActivator(); $wrapper = new Wrapper($hiddenNeurons = 3, $hiddenLayers = 1); $network_file = 'network.txt'; if (is_file($network_file)) { // Restore the Network $wrapper->restore($network_file); } else { // Possible input values $properties = [ 'color' => ['red', 'pink', 'blue', 'green'], 'hair_length' => ['short', 'long'] ]; $outputs = [ 'gender' => ['male', 'female'] ]; // Setup the wrapper $wrapper->initialize($properties, $outputs, $activator); // Setup the lessons $lessons = [ [ 'input' => [ 'color' => 'red', 'hair_length' => 'long', ], 'output' => [ 'gender' => 'female' ], ], [ 'input' => [ 'color' => 'blue', 'hair_length' => 'short', ], 'output' => [ 'gender' => 'male' ], ], [ 'input' => [ 'color' => 'red', 'hair_length' => 'short', ], 'output' => [ 'gender' => 'male' ], ], ]; // Train the lessons $wrapper->train($lessons); // Archive the Network $wrapper->archive($network_file); } // Setup the check lesson $test_lesson = [ 'input' => [ 'color' => ['pink', 'green'], 'hair_length' => 'long', ], 'output' => [ 'gender' => 'female' ] ]; // Propagate the check lesson $wrapper->predict($test_lesson); // Print the Output print_r($wrapper->getResult()); // Backpropagate $wrapper->backPropagate($test_lesson);