allessandro / 神经网络
人工神经网络
v0.1.2
2017-01-15 19:37 UTC
Requires
- php: >=5.5.0
Requires (Dev)
- phpunit/phpunit: ^4.7.0
- satooshi/php-coveralls: ~1.0
This package is not auto-updated.
Last update: 2024-09-14 19:47:31 UTC
README
语言选择
要求
此包仅支持 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
的接口实现是 LayeredNetwork
中 INode
的形式化组。
节点
INode
- 神经元,输入神经元等。
突触
突触是两个节点(INode
)之间的连接。突触接收神经元发射器的输出(调用 output()
),并通过其权重转换值。结果值通过神经元接收器(它调用 ISynapse
的 output()
)。
贡献
对包的贡献总是受欢迎的!
许可
代码库采用 MIT 许可证授权。