| 
<?PHPini_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) {
 // Load both sets separately
 $trainData = load_mnist_dataset('train', $path);
 $X = $trainData['X'];
 $y = $trainData['y'];
 
 $testData = load_mnist_dataset('test', $path);
 $X_test = $testData['X'];
 $y_test = $testData['y'];
 
 // And return all the data
 return [$X,$y,$X_test,$y_test];
 }
 
 
 $mnist_data = create_data_mnist("fashion_mnist_images");
 
 list($X, $y, $X_test, $y_test) = $mnist_data;
 
 
 $keys = range(0, NumpyLight::shape($X)[0] - 1);
 
 NumpyLight::random()->shuffle($keys);
 
 $X = NumpyLight::rearrangeMatrix($X, $keys);
 $y = NumpyLight::rearrangeMatrix($y, $keys);
 
 
 $X = NumpyLight::divide(
 NumpyLight::subtract(
 NumpyLight::reshape(
 $X,
 [NumpyLight::shape($X)[0],-1])
 ,
 127.5)
 ,127.5);
 
 $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\n Model Init \n\n";
 echo "\n\n? Training on MNIST dataset will commence ?\n\n";
 
 $Model = new Model();
 $Model->add(new Layer_Dense(NumpyLight::shape($X)[1],64));
 $Model->add(new Activation_Relu());
 $Model->add(new Layer_Dense(64,64));
 $Model->add(new Activation_Relu());
 $Model->add(new Layer_Dense(64,64));
 $Model->add(new Activation_Softmax());
 $Model->set(
 $loss_function = new Loss_CategoricalCrossentropy(),
 $optimizer = new Optimizer_Adam($learning_rate = 0.001, $decay = 1e-3),
 $accuracy = new Accuracy_Categorical()
 );
 
 $Model->finalize();
 
 $Model->train($X, $y,$epoch = 1000, $batch_size = 128,$print_every = 100,$validation_data = $validation);
 
 
 $Model->save("fashion_mnist_model");
 
 ?>
 |