PHP Classes

File: TEST/TrainingTest/p133_loss_activation_test.php

Recommend this page to a friend!
  Classes of Cuthbert Martin Lwinga   PHP Neural Net Library   TEST/TrainingTest/p133_loss_activation_test.php   Download  
File: TEST/TrainingTest/p133_loss_activation_test.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: 1 month ago
Size: 2,464 bytes
 

Contents

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

}



?>