/** * @param Neuron $neuron * * @return float */ public function getSigmaForNeuron(Neuron $neuron) : float { $sigma = 0.0; foreach ($this->neuron->getSynapses() as $synapse) { if ($synapse->getNode() == $neuron) { $sigma += $synapse->getWeight() * $this->getSigma(); } } return $sigma; }
public function testNeuronRefresh() { $neuron = new Neuron(); $neuron->getOutput(); $neuron->addSynapse($this->getSynapseMock()); $this->assertEquals(0.5, $neuron->getOutput(), '', 0.01); $neuron->refresh(); $this->assertEquals(0.88, $neuron->getOutput(), '', 0.01); }
/** * @param Neuron $neuron * @param array $target * @param int $key * @param bool $lastLayer * * @return float */ private function getSigma(Neuron $neuron, array $target, int $key, bool $lastLayer) : float { $neuronOutput = $neuron->getOutput(); $sigma = $neuronOutput * (1 - $neuronOutput); if ($lastLayer) { $sigma *= $target[$key] - $neuronOutput; } else { $sigma *= $this->getPrevSigma($neuron); } $this->sigmas[] = new Sigma($neuron, $sigma); return $sigma; }
/** * @param Layer $currentLayer * @param Neuron $nextNeuron */ private function generateNeuronSynapses(Layer $currentLayer, Neuron $nextNeuron) { foreach ($currentLayer->getNodes() as $currentNeuron) { $nextNeuron->addSynapse(new Synapse($currentNeuron)); } }