| 
<?phpinclude_once("../../CLASSES/Headers.php");
 use NameSpaceNumpyLight\NumpyLight;
 use NameSpaceRandomGenerator\RandomGenerator;
 use NameSpaceActivationRelu\Activation_Relu;
 use NameSpaceOptimizerSGD\Optimizer_SGD;
 list($X, $y) = NumpyLight::vertical_data(100, 3);
 
 // page i was reading 243
 // Create layers and activations
 $dense1 = new Layer_Dense(2, 3);
 $activation1 = new Activation_ReLU();
 $dense2 = new Layer_Dense(3, 3);
 $activation2 = new Activation_Softmax();
 $loss_function = new Loss_CategoricalCrossentropy();
 
 # Helper variables
 $lowest_loss = 9999999; # some initial value
 $best_dense1_weights = $dense1->weights;
 $best_dense1_biases = $dense1->biases;
 $best_dense2_weights = $dense2->weights;
 $best_dense2_biases = $dense2->biases;
 
 // // Train the network
 for ($epoch = 0; $epoch <= 10000; $epoch++) {
 $dense1->weights = NumpyLight::add($dense1->weights,NumpyLight::multiply(NumpyLight::random()->rand(2,3),0.05));
 $dense1->biases = NumpyLight::add($dense1->biases,NumpyLight::multiply(NumpyLight::random()->rand(1,3),0.05));
 $dense2->weights = NumpyLight::add($dense2->weights,NumpyLight::multiply(NumpyLight::random()->rand(3,3),0.05));
 $dense2->biases = NumpyLight::add($dense2->biases,NumpyLight::multiply(NumpyLight::random()->rand(1,3),0.05));
 
 
 # Perform a forward pass of our training data through this layer
 $dense1->forward($X);
 $activation1->forward($dense1->output);
 $dense2->forward($activation1->output);
 $activation2->forward($dense2->output);
 # Perform a forward pass through activation function
 # it takes the output of second dense layer here and returns loss
 $loss = $loss_function->calculate($activation2->output, $y);
 #Chapter 6 - Introducing Optimization - Neural Networks from Scratch in Python
 # Calculate accuracy from output of activation2 and targets
 # calculate values along first axis
 $accuracy = NumpyLight::accuracy($activation2->output, $y);
 // # If loss is smaller - print and save weights and biases aside
 if($loss < $lowest_loss){
 echo  "New set of weights found, iteration: $epoch, loss: $loss, acc: $accuracy \n";
 $best_dense1_weights = $dense1->weights;
 $best_dense1_biases = $dense1->biases;
 $best_dense2_weights = $dense2->weights;
 $best_dense2_biases = $dense2->biases;
 $lowest_loss = $loss;
 }else{
 $dense1->weights = $best_dense1_weights;
 $dense1->biases = $best_dense1_biases;
 $dense2->weights = $best_dense2_weights;
 $dense2->biases = $best_dense2_biases;
 }
 
 }
 
 
 
 ?>
 
 |