public static void Train()
        {
            var holder = new CsvHolder();

            holder.LoadTrainingSet();
            var nn = new NeuralNet();

            var batches     = 1875;
            var batchesSize = 32;
            var epochs      = 100;

            for (int i = 0; i < epochs; i++)
            {
                var loss = 0.0;
                Console.WriteLine("EPOCH {0} OF {1}", i + 1, epochs);
                for (int j = 0; j < batches; j++)
                {
                    string xFilter = j * batchesSize + ":" + (j + 1) * batchesSize;
                    string filter  = xFilter + ",1:";
                    string filter2 = xFilter + ",0";

                    if (j % 75 == 0)
                    {
                        Console.WriteLine("[EPOCH {0} - BATCH {1} OF {2}] :: Using filters \"{3}\" and \"{4}\"", i + 1, j, batches, filter, filter2);
                    }

                    var dataX = (holder.TrainingSet[filter].T) / 255;
                    var dataY = holder.TrainingSet[filter2].T;

                    loss += nn.Train(dataX, dataY);
                }

                Console.WriteLine("EPOCH {0} DONE. AVERAGE LOSS = {1}", i, loss / batches);
                Shuffle(holder.TrainingSet);
                nn.PrintWB();
            }
        }
 public Controller()
 {
     _nn     = new NeuralNet.NeuralNet();
     _holder = new CsvHolder();
     _holder.LoadTestSet();
 }