PHP Classes

File: TEST/TrainingTest/p432_Optimizer_Adam_with_regulization.php

Recommend this page to a friend!
  Classes of Cuthbert Martin Lwinga   PHP Neural Net Library   TEST/TrainingTest/p432_Optimizer_Adam_with_regulization.php   Download  
File: TEST/TrainingTest/p432_Optimizer_Adam_with_regulization.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Neural Net Library
Build, train, evaluate, and use neural networks
Author: By
Last change:
Date: 6 months ago
Size: 4,068 bytes
 

Contents

Class file image Download
<?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;

list(
$X, $y) = NumpyLight::sine_data();

// Initialize layers
$dense1 = new Layer_Dense(1, 512);
$activation1 = new Activation_ReLU();

$dense2 = new Layer_Dense(512, 512);
$activation2 = new Activation_ReLU();

$dense3 = new Layer_Dense(512, 1);
$activation3 = new Activation_Linear();

// Initialize loss function and optimizer
$loss_function = new Loss_MeanSquaredError();
$optimizer = new Optimizer_Adam();

// var_dump($flattened_y);


// Calculate accuracy precision
$y_std = NumpyLight::std($y);
$accuracy_precision = $y_std/250;

// Training loop
for ($epoch = 0; $epoch <= 10000; $epoch++) {
   
// Forward pass
   
$dense1->forward($X);
   
$activation1->forward($dense1->output);

   
$dense2->forward($activation1->output);
   
$activation2->forward($dense2->output);


   
$dense3->forward($activation2->output);
   
$activation3->forward($dense3->output);

   
// Compute losses
   
$data_loss = $loss_function->calculate($activation3->output, $y,false);
   
$regularization_loss = $loss_function->regularization_loss($dense1) +
                          
$loss_function->regularization_loss($dense2)+
                          
$loss_function->regularization_loss($dense3);
   
$loss = $data_loss + $regularization_loss;

   
// Compute accuracy
   
$predictions = $activation3->output;
   
$accuracy = NumpyLight::calculateAccuracy($predictions, $y, $accuracy_precision);

    if (
$epoch % 100 == 0) {
        echo
"epoch: $epoch, acc: $accuracy, loss: $loss (data_loss: $data_loss, reg_loss: $regularization_loss), lr: {$optimizer->current_learning_rate}\n";
    }

   
// Backward pass
   
   
$loss_function->backward($activation3->output, $y);

   
   
$activation3->backward($loss_function->dinputs);
   
   
   
$dense3->backward($activation3->dinputs);
   
   
$activation2->backward($dense3->dinputs);
   
$startTime = microtime(true); // Start time
   
$dense2->backward($activation2->dinputs);
   
$endTime = microtime(true); // End time
   
$executionTime = $endTime - $startTime; // Calculate execution time
    // echo "\n_________________________ time=> $executionTime seconds.\n";
   
$activation1->backward($dense2->dinputs);
   
$dense1->backward($activation1->dinputs);

   
// echo "\nhere\n";
    // Update weights and biases
   
   
$optimizer->pre_update_params();
   
$optimizer->update_params($dense1);
   
$optimizer->update_params($dense2);
   
$optimizer->update_params($dense3);
   
$optimizer->post_update_params();
   

}


$plotterTemp = new LinePlotter(500, 500);
$plotterTemp->setColor('blue', 0, 0, 255); // Blue color
$plotterTemp->setColor('red', 255, 0, 0); // Blue color

list($X_test, $y_test) = NumpyLight::sine_data();

$dense1->forward($X_test);
$activation1->forward($dense1->output);
$dense2->forward($activation1->output);
$activation2->forward($dense2->output);
$dense3->forward($activation2->output);
$activation3->forward($dense3->output);


$acc = NumpyLight::calculateAccuracy($activation3->output, $y_test,$accuracy_precision);

echo
"\n\n validation, acc: $acc , loss: $loss \n\n";


$y_test = NumpyLight::reshape($y_test,[-1,1]);
$activation2->output = NumpyLight::reshape($activation2->output,[-1,1]);

$flattened_y_test = array_merge(...array_map('array_values', $y_test));
$activation2_y = array_merge(...array_map('array_values', $activation3->output));



$lines = [
    [
       
'yValues' => $flattened_y_test,
       
'color' => 'blue'
   
],
    [
       
'yValues' => $activation2_y,
       
'color' => 'red'
   
]
];

// Plot multiple lines using only y-values
$plotterTemp->plotMultipleLinesWithYOnly($lines);




$plotterTemp->save(basename($_SERVER['PHP_SELF'])."-Lineplot.png");






?>