public static void Run()
        {
            //Logistic Regression is one of the first models newcomers to Deep Learning are implementing.
            //The focus of this tutorial is to show how to do logistic regression using Gluon API.

            var ctx             = mx.Cpu();
            int train_data_size = 1000;
            int val_data_size   = 100;

            var(train_x, train_ground_truth_class) = GetRandomState(train_data_size, ctx);
            var train_dataset = new ArrayDataset((train_x, train_ground_truth_class));

            train_dataloader = new DataLoader(train_dataset, batch_size: batch_size, shuffle: true);

            var(val_x, val_ground_truth_class) = GetRandomState(val_data_size, ctx);
            var val_dataset = new ArrayDataset((val_x, val_ground_truth_class));

            val_dataloader = new DataLoader(val_dataset, batch_size: batch_size, shuffle: true);

            net = new HybridSequential();
            net.Add(new Dense(units: 10, activation: ActivationType.Relu));
            net.Add(new Dense(units: 10, activation: ActivationType.Relu));
            net.Add(new Dense(units: 10, activation: ActivationType.Relu));
            net.Add(new Dense(units: 1));

            net.Initialize(new Xavier());
            loss    = new SigmoidBinaryCrossEntropyLoss();
            trainer = new Trainer(net.CollectParams(), new SGD(learning_rate: 0.1f));

            accuracy = new Accuracy();
            f1       = new F1();

            int   epochs    = 10;
            float threshold = 0.5f;

            foreach (var e in Enumerable.Range(0, epochs))
            {
                var avg_train_loss = TrainModel() / train_data_size;
                var avg_val_loss   = ValidateModel(threshold) / val_data_size;
                Console.WriteLine($"Epoch: {e}, Training loss: {avg_train_loss}, Validation loss: {avg_val_loss}, Validation accuracy: {accuracy.Get().Item2}, F1 score: {f1.Get().Item2}");
            }
        }