allessandro/神经网络

人工神经网络

v0.1.2 2017-01-15 19:37 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:47:31 UTC


README

Build Status Coverage Status Code Climate Latest Stable Version Latest Unstable Version Total Downloads License

语言选择

English Russian

要求

此包仅支持 PHP 5.5 及以上版本。

安装

方法 #1(推荐):Composer 包

更多信息请访问 getcomposer.org

执行命令

composer require a1essandro/neural-network ^0.1.0

或添加以下行到 composer.json

"require": {
    ...
    "require a1essandro/neural-network": "^0.1.0"
},

方法 #2:克隆仓库

执行命令

git clone https://github.com/A1essandro/neural-network

用法

常见

XOR 示例

use Neural\BackpropagationTeacher;
use Neural\MultilayerPerceptron;

require_once '../vendor/autoload.php';

//Creation neural network, with 2 input-neurons, one hidden layer with 2 neurons and one output neuron:
$p = new MultilayerPerceptron([2, 2, 1]); //You may add more hidden layers or neurons to layers: [2, 3, 2, 1]
$p->generateSynapses(); //automatically add synapses

$t = new BackpropagationTeacher($p); //Teacher with backpropagation algorithm

//Teach until it learns
$learningResult = $t->teachKit(
    [[1, 0], [0, 1], [1, 1], [0, 0]], //kit for learning
    [[1], [1], [0], [0]], //appropriate expectations 
    0.3, //error
    10000 //max iterations
);

if ($learningResult != -1) {
    echo '1,0: ' . round($p->input([1, 0])->output()[0]) . PHP_EOL;
    echo '0,1: ' . round($p->input([0, 1])->output()[0]) . PHP_EOL;
    echo '0,0: ' . round($p->input([0, 0])->output()[0]) . PHP_EOL;
    echo '1,1: ' . round($p->input([1, 1])->output()[0]) . PHP_EOL;
}

/* Result:
1,0: 1
0,1: 1
0,0: 0
1,1: 0
*/

手动配置网络

$p = new MultilayerPerceptron([2, 2, 1]);

//Equivalent to:

$p = new MultilayerPerceptron();
$p->addLayer(new Layer())->toLastLayer()
    ->addNode(new Input())
    ->addNode(new Input())
    ->addNode(new Bias());
$p->addLayer(new Layer())->toLastLayer()
    ->addNode(new Neuron())
    ->addNode(new Neuron())
    ->addNode(new Bias());
$p->addLayer(new Layer())->toLastLayer()
    ->addNode(new Neuron());

//Do not forget to add synapses:

$p->generateSynapses();

//Or you may direct the process:

$neuronFilter = function($node) {
    return $node instanceof Neuron;
};

$secondLayerNeuron = iterator_to_array($p->getLayers()[1]->getNodes($neuronFilter))[0];
$input = iterator_to_array($p->getLayers()[0]->getNodes())[0];
$secondLayerNeuron->addSynapse(new Synapse($input));

//and so on...

规范

网络

INetwork 的接口实现是一个容器,包含节点(INode)通过突触(Synapse)相互连接。

ILayer 的接口实现是 LayeredNetworkINode 的形式化组。

节点

INode - 神经元,输入神经元等。

突触

突触是两个节点(INode)之间的连接。突触接收神经元发射器的输出(调用 output()),并通过其权重转换值。结果值通过神经元接收器(它调用 ISynapseoutput())。

贡献

对包的贡献总是受欢迎的!

许可

代码库采用 MIT 许可证授权。