data = []; } public function flush(): void { event(new \App\Events\PerceptronTrainingIteration($this->data, $this->sessionId, $this->trainingId)); $this->data = []; } public function addIteration(int $epoch, int $exampleIndex, float $error, array $synaptic_weights): void { $newData = [ "epoch" => $epoch, "exampleIndex" => $exampleIndex, "error" => $error, "weights" => $synaptic_weights, ]; if ($this->underSizeIncreaseCount <= $this->sizeIncreaseStart) { // Special case where we need to send each iteration separately $this->underSizeIncreaseCount++; $this->data[] = $newData; $this->flush(); return; } $lastEpoch = $this->data[0]['epoch'] ?? null; if ($this->data && $lastEpoch !== $epoch) { // Current Epoch has changed from the last one if ($lastEpoch % $this->epochInterval === 0) { // The last epoch need to be sent $this->flush(); // Flush all data from the previous epoch } else { $this->data = []; } $lastEpoch = $epoch; } $this->data[] = $newData; } }