mirror of
https://github.com/Llewellynvdm/php-ml.git
synced 2024-09-28 23:19:01 +00:00
726cf4cddf
* travis: move coveralls here, decouple from package * composer: use PSR4 * phpunit: simpler config * travis: add ecs run * composer: add ecs dev * use standard vendor/bin directory for dependency bins, confuses with local bins and require gitignore handling * ecs: add PSR2 * [cs] PSR2 spacing fixes * [cs] PSR2 class name fix * [cs] PHP7 fixes - return semicolon spaces, old rand functions, typehints * [cs] fix less strict typehints * fix typehints to make tests pass * ecs: ignore typehint-less elements * [cs] standardize arrays * [cs] standardize docblock, remove unused comments * [cs] use self where possible * [cs] sort class elements, from public to private * [cs] do not use yoda (found less yoda-cases, than non-yoda) * space * [cs] do not assign in condition * [cs] use namespace imports if possible * [cs] use ::class over strings * [cs] fix defaults for arrays properties, properties and constants single spacing * cleanup ecs comments * [cs] use item per line in multi-items array * missing line * misc * rebase
56 lines
1.2 KiB
PHP
56 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Phpml\NeuralNetwork;
|
|
|
|
use Phpml\Exception\InvalidArgumentException;
|
|
use Phpml\NeuralNetwork\Node\Neuron;
|
|
|
|
class Layer
|
|
{
|
|
/**
|
|
* @var Node[]
|
|
*/
|
|
private $nodes = [];
|
|
|
|
/**
|
|
* @throws InvalidArgumentException
|
|
*/
|
|
public function __construct(int $nodesNumber = 0, string $nodeClass = Neuron::class, ?ActivationFunction $activationFunction = null)
|
|
{
|
|
if (!in_array(Node::class, class_implements($nodeClass))) {
|
|
throw InvalidArgumentException::invalidLayerNodeClass();
|
|
}
|
|
|
|
for ($i = 0; $i < $nodesNumber; ++$i) {
|
|
$this->nodes[] = $this->createNode($nodeClass, $activationFunction);
|
|
}
|
|
}
|
|
|
|
public function addNode(Node $node): void
|
|
{
|
|
$this->nodes[] = $node;
|
|
}
|
|
|
|
/**
|
|
* @return Node[]
|
|
*/
|
|
public function getNodes(): array
|
|
{
|
|
return $this->nodes;
|
|
}
|
|
|
|
/**
|
|
* @return Neuron
|
|
*/
|
|
private function createNode(string $nodeClass, ?ActivationFunction $activationFunction = null): Node
|
|
{
|
|
if ($nodeClass == Neuron::class) {
|
|
return new Neuron($activationFunction);
|
|
}
|
|
|
|
return new $nodeClass();
|
|
}
|
|
}
|