noiselabs / build-your-own-neural-network
Support code for the "Build Your Own Neural Network With PHP" talk
dev-master
2018-06-07 18:10 UTC
Requires
- php: ^7.1
- markrogoyski/math-php: ^0.38.0
- monolog/monolog: ^1.23
- webmozart/assert: ^1.3
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2024-11-11 15:54:49 UTC
README
Support material for the Build your own Neural Network, with PHP! talk.
Requirements
- Docker and Docker Compose
- PHP 7
Installation
With Docker:
$ docker-compose build
or (PHP and Composer installed on the host):
$ composer install
Usage
Included is an example with a Neural Network configured to solve an XOR:
#!/usr/bin/env php <?php require_once __DIR__ . '/../vendor/autoload.php'; use Noiselabs\Byonn\Activation; use Noiselabs\Byonn\CostFunction; use Noiselabs\Byonn\Debug\Debugger; use Noiselabs\Byonn\Initializer; use Noiselabs\Byonn\Optimizer; use Noiselabs\Byonn\TrainingSet; use Noiselabs\Byonn\Topology; use Noiselabs\Byonn\NeuralNetwork; $xorTrainingSet = new TrainingSet( [[0, 0], [0, 1], [1, 0], [1, 1]], [0, 1, 1, 0] ); $neuralNetwork = new NeuralNetwork( new Topology([2, 2, 1], [ new Activation\Sigmoid(), new Activation\Sigmoid(), ]), new Initializer\ParametersInitializer( new Initializer\Zeros(), new Initializer\RandomUniform(0, 1) ), new Optimizer\GradientDescent(0.1), new CostFunction\MeanSquaredError() ); $neuralNetwork->train($xorTrainingSet, 20000, 0.01);
To run the XOR example do:
$ docker-compose run byonn examples/xor.php
Training for 20000 epochs or until the cost falls below 0.010000...
* Epoch: 100, Error: 0.255492
* Epoch: 200, Error: 0.255405
* Epoch: 300, Error: 0.255290
* Epoch: 400, Error: 0.255123
* Epoch: 500, Error: 0.254865
* Epoch: 600, Error: 0.254448
* Epoch: 700, Error: 0.253756
* Epoch: 800, Error: 0.252605
* Epoch: 900, Error: 0.250739
* Epoch: 1000, Error: 0.247854
* Epoch: 1100, Error: 0.243657
* Epoch: 1200, Error: 0.237923
* Epoch: 1300, Error: 0.230646
* Epoch: 1400, Error: 0.222266
* Epoch: 1500, Error: 0.213619
* Epoch: 1600, Error: 0.205390
* Epoch: 1700, Error: 0.197623
* Epoch: 1800, Error: 0.189829
* Epoch: 1900, Error: 0.181427
* Epoch: 2000, Error: 0.171591
* Epoch: 2100, Error: 0.158625
* Epoch: 2200, Error: 0.140188
* Epoch: 2300, Error: 0.115453
* Epoch: 2400, Error: 0.088116
* Epoch: 2500, Error: 0.064397
* Epoch: 2600, Error: 0.047156
* Epoch: 2700, Error: 0.035515
* Epoch: 2800, Error: 0.027689
* Epoch: 2900, Error: 0.022291
* Epoch: 3000, Error: 0.018439
* Epoch: 3100, Error: 0.015599
* Epoch: 3200, Error: 0.013442
* Epoch: 3300, Error: 0.011760
* Epoch: 3400, Error: 0.010419
...done.
Epochs: 3437, Error: 0.009991 (took 11.00 seconds).
Predictions:
* Input: [0, 0], Predicted: 0.095753662872186, Expected: 0 [passed]
* Input: [0, 1], Predicted: 0.90347433019157, Expected: 1 [passed]
* Input: [1, 0], Predicted: 0.90289800056285, Expected: 1 [passed]
* Input: [1, 1], Predicted: 0.10851568961942, Expected: 0 [passed]
Accuracy: 100%
or without Docker:
$ php examples/xor.php
...
And to help you debug your network a report gets generated after each run in the build
folder.
Have fun!
Copyright
Copyright (c) 2018 Vítor Brandão. Licensed under the MIT License.