36 lines
1.3 KiB
PHP
36 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services\SynapticWeightsProvider;
|
|
|
|
use App\Services\SynapticWeightsProvider\INetworkSynapticWeightsProvider;
|
|
|
|
class SimpleNetworkWeightsProvider implements INetworkSynapticWeightsProvider
|
|
{
|
|
public function __construct(
|
|
private ISynapticWeightsProvider $synapticWeightsProvider,
|
|
) {
|
|
}
|
|
|
|
public function generate(int $input_size, int $output_size, int $hidden_layers_count, int $hidden_layers_neurons_count): array
|
|
{
|
|
$synaptic_weights = [];
|
|
$lastLayerSize = $input_size;
|
|
|
|
// Generate Hidden Layer weights
|
|
for ($hiddenLayerNeuronIndex = 0; $hiddenLayerNeuronIndex < $hidden_layers_count; $hiddenLayerNeuronIndex++) {
|
|
for ($neuronIndex = 0; $neuronIndex < $hidden_layers_neurons_count; $neuronIndex++) {
|
|
$synaptic_weights[] = $this->synapticWeightsProvider->generate($lastLayerSize);
|
|
}
|
|
$lastLayerSize = $hidden_layers_neurons_count;
|
|
}
|
|
|
|
// Generate Output Layer weights
|
|
$synaptic_weights[] = [];
|
|
for ($outputNeuronIndex = 0; $outputNeuronIndex < $output_size; $outputNeuronIndex++) {
|
|
$synaptic_weights[count($synaptic_weights) -1][] = $this->synapticWeightsProvider->generate($lastLayerSize);
|
|
}
|
|
|
|
return $synaptic_weights;
|
|
}
|
|
}
|