<?php 
ini_set('memory_limit', '1024M'); // Increase the memory limit to 1024MB 
include_once("../../CLASSES/Headers.php"); 
use NameSpaceNumpyLight\NumpyLight; 
use NameSpaceRandomGenerator\RandomGenerator; 
use NameSpaceActivationRelu\Activation_Relu; 
use NameSpaceOptimizerSGD\Optimizer_SGD; 
use NameSpaceOptimizerAdagrad\Optimizer_Adagrad; 
use NameSpaceOptimizerRMSprop\Optimizer_RMSprop; 
 
$dataAnalyzed = "spiral_data"; 
list($X, $y) = NumpyLight::spiral_data(100, 3); 
# Create test dataset 
list($X_test, $y_test) = NumpyLight::spiral_data(100, 3); 
 
$filename = pathinfo(basename($_SERVER['SCRIPT_NAME']), PATHINFO_FILENAME); 
// Create layers and activations,,$weight_regularizer_l2 = 5e-4 ,$bias_regularizer_l2 = 5e-4 
$dense1 = new Layer_Dense(2, 512,$weight_regularizer_l2 = 5e-4 ,$bias_regularizer_l2 = 5e-4); 
$activation1 = new Activation_ReLU(); 
$dropout1 = new Layer_Dropout(0.1); 
$dense2 = new Layer_Dense(512, 3); 
$loss_activation = new Activation_Softmax_Loss_CategoricalCrossentropy(); 
$optimizer = new Optimizer_Adam($learning_rate = 0.05 , $decay = 5e-5 ); 
$lossTrend = []; 
$accTrend = []; 
$lrTrend = []; 
$data_loss_arr = []; 
$regularization_loss_arr = []; 
 
$plotterTemp = new LinePlotter(500, 500); 
$plotterTemp->plotPoints($X, $y); 
$plotterTemp->save("images/".$filename."_$dataAnalyzed.png"); 
 
// // Train the network 
for ($epoch = 0; $epoch <= 10000; $epoch++) { 
    // echo "$epoch \n"; 
 
    $dense1->forward($X); 
    $activation1->forward($dense1->output); 
     
    # Perform a forward pass through Dropout layer 
    $dropout1->forward($activation1->output); 
    $dense2->forward($dropout1->output); 
     
    $data_loss = $loss_activation->forward($dense2->output, $y,false); 
    $regularization_loss = $loss_activation->loss->regularization_loss($dense1)+$loss_activation->loss->regularization_loss($dense2); 
 
    # Calculate overall loss 
    $loss = $data_loss + $regularization_loss; 
 
    $predictions = NumpyLight::accuracy($loss_activation->output, $y); 
     
    if (($epoch%100==0)) { 
        $lossTrend[] = $loss; 
        $accTrend[] = $predictions; 
        $lrTrend[] = $optimizer->current_learning_rate; 
        $data_loss_arr[] = $data_loss; 
        // $regularization_loss_arr[] = $regularization_loss; 
        echo "epoc: $epoch ,\tacc: $predictions\t,loss: $loss, (data_loss: $data_loss, reg_loss: $regularization_loss),\t lr: $optimizer->current_learning_rate\n"; 
    } 
 
    # Backward pass 
 
    $loss_activation->backward($loss_activation->output, $y); 
    $dense2->backward($loss_activation->dinputs); 
    $dropout1->backward($dense2->dinputs); 
    $activation1->backward($dropout1->dinputs); 
    $dense1->backward($activation1->dinputs); 
     
    // # Update weights and biases 
    $optimizer->pre_update_params(); 
    $optimizer->update_params($dense1); 
    $optimizer->update_params($dense2); 
    $optimizer->post_update_params(); 
 
} 
 
 
    $dense1->forward($X_test); 
    $activation1->forward($dense1->output); 
    $dense2->forward($activation1->output); 
     
    $loss = $loss_activation->forward($dense2->output, $y_test);     
     
    $acc = NumpyLight::accuracy($loss_activation->output, $y_test); 
 
    echo "\n\n validation, acc: $acc , loss: $loss \n\n"; 
 
 
    $plotter = new LinePlotter(500, 500); 
    $plotter->setColor('red', 255, 0, 0); 
    $plotter->plotLine($lossTrend, 'red'); 
    $plotter->save("images/".$filename."_".$dataAnalyzed."_Loss_stat.png"); 
 
    $plotter = new LinePlotter(500, 500); 
    $plotter->setColor('green', 0, 255, 0); 
    $plotter->plotLine($accTrend, 'green'); 
    $plotter->save("images/".$filename."_".$dataAnalyzed."_Acc_stat.png"); 
 
    $plotter = new LinePlotter(500, 500); 
    $plotter->setColor('blue', 0, 0, 255); 
    $plotter->plotLine($lrTrend, 'blue'); 
    $plotter->save("images/".$filename."_".$dataAnalyzed."_lr_stat.png"); 
 
    $plotter = new LinePlotter(500, 500); 
    $plotter->setColor('blue', 0, 0, 255); 
    $plotter->plotLine($data_loss_arr, 'blue'); 
    $plotter->save("images/".$filename."_".$dataAnalyzed."_data_loss.png"); 
 
// $plotter = new LinePlotter(500, 500); 
// $plotter->setColor('blue', 0, 0, 255); 
// $plotter->plotLine($regularization_loss_arr, 'blue'); 
// $plotter->save("images/".$filename."_".$regularization_loss_arr."_regularization_loss.png"); 
 
 
?> 
 
 |