<?PHP
ini_set('memory_limit', '20480M'); // Increase the memory limit to 20480MB (20GB)
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;
function load_mnist_dataset($dataset, $path) {
$labels = [];
$dir = $path . '/' . $dataset;
// Check if the main directory exists and is readable
if (is_readable($dir) && ($dir_content = scandir($dir))) {
foreach ($dir_content as $item) {
if ($item !== '.' && $item !== '..' && is_dir($dir . '/' . $item)) {
$labels[] = $item;
}
}
}
$X = [];
$y = [];
foreach ($labels as $label) {
$label_path = $dir . '/' . $label;
if (is_readable($label_path) && ($files = scandir($label_path))) {
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
$filePath = $label_path . '/' . $file;
if (is_readable($filePath) && !is_dir($filePath)) {
$imageProcessor = new ImageProcessor($filePath);
$imageData = $imageProcessor->getImageGrayscaleArray(["rows" => 28, "cols" => 28]);
$X[] = $imageData;
$y[] = $label;
}
}
}
}
}
return ["X" => $X, "y" => $y];
}
function create_data_mnist($path) {
$testData = load_mnist_dataset('test', $path);
$X_test = $testData['X'];
$y_test = $testData['y'];
// And return all the data
return [$X_test,$y_test];
}
$mnist_data = create_data_mnist("fashion_mnist_images");
list($X_test, $y_test) = $mnist_data;
// $keys = range(0, NumpyLight::shape($X_test)[0] - 1);
NumpyLight::random()->shuffle($keys);
$X_test = NumpyLight::divide(
NumpyLight::subtract(
NumpyLight::reshape(
$X_test,
[NumpyLight::shape($X_test)[0],-1])
,
127.5)
,127.5);
$validation = [$X_test, $y_test];
echo "\n\nModel Init\n\n";
$Model = Model::load('fashion_mnist_model');
// $Model->evaluate($X_test, $y_test);
$confidences = $Model->predict($X_test);
$predictions = $Model->output_layer_activation->predictions($confidences);
$fashion_mnist_labels = [
0 => 'T-shirt/top',
1 => 'Trouser',
2 => 'Pullover',
3 => 'Dress',
4 => 'Coat',
5 => 'Sandal',
6 => 'Shirt',
7 => 'Sneaker',
8 => 'Bag',
9 => 'Ankle boot'
];
for ($i = 0; $i < count($predictions); $i++) {
// Prepare the label text
$labelText = $fashion_mnist_labels[$predictions[$i]] . " actual label " . $fashion_mnist_labels[$y_test[$i]];
// Pad the label text to a fixed length, e.g., 50 characters
$paddedLabelText = str_pad($labelText, 50);
// Echo the padded label text
echo $paddedLabelText . " ";
// Check condition and echo the symbol
if ($fashion_mnist_labels[$predictions[$i]] == $fashion_mnist_labels[$y_test[$i]]) {
echo "?"; // Green check mark for true
} else {
echo "?"; // Red cross for false
}
echo "\n\n";
}
?>
|