Esempio n. 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="baseFolder">Base folder with MNIST dataset files</param>
        /// <param name="imagesCnt">How many images to load</param>
        /// <param name="exact">If TRUE, you will get exactly imagesCnt images. If FALSE, you will get AT MOST imagesCnt images. It's here for performance reason and BC</param>
        /// <param name="afterLastImage">What to do, after the last values has been sent</param>
        public MyMNISTManager(string baseFolder, int trainingExamplesPerDigitCnt = int.MaxValue, int testExamplesPerDigitCnt = int.MaxValue,
                              bool exact = false, MNISTLastImageMethod afterLastImage = MNISTLastImageMethod.ResetToStart)
        {
            m_baseFolder     = baseFolder;
            m_trainingImages = new ArrayList();
            m_testImages     = new ArrayList();
            m_afterLastImage = afterLastImage;
            m_trainingExamplesPerDigitCnt = trainingExamplesPerDigitCnt;
            m_testExamplesPerDigitCnt     = testExamplesPerDigitCnt;
            m_imagesServed     = 0;
            m_sequenceIterator = 0;
            m_definedOrder     = false;

            // START TIME MEASUREMENT ----------------------------------------------------------
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            ReadMnistSet("train-images.idx3-ubyte", "train-labels.idx1-ubyte", m_trainingExamplesPerDigitCnt, m_trainingImages);
            ReadMnistSet("t10k-images.idx3-ubyte", "t10k-labels.idx1-ubyte", m_testExamplesPerDigitCnt, m_testImages);

            byte[,] data = new byte[28, 28];
            m_blankImage = new MyMNISTImage(data, 0);

            m_trainingImagesEnumerator = m_trainingImages.GetEnumerator();
            m_testImagesEnumerator     = m_testImages.GetEnumerator();

            //sw.Stop();
            //Console.WriteLine("Elapsed={0}", sw.Elapsed);
        }
Esempio n. 2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="baseFolder">Base folder with MNIST dataset files</param>
        /// <param name="imagesCnt">How many images to load</param>
        /// <param name="exact">If TRUE, you will get exactly imagesCnt images. If FALSE, you will get AT MOST imagesCnt images. It's here for performance reason and BC</param>
        /// <param name="afterLastImage">What to do, after the last values has been sent</param>
        public MyMNISTManager(string baseFolder, int trainingExamplesPerDigitCnt = int.MaxValue, int testExamplesPerDigitCnt = int.MaxValue,
            bool exact = false, MNISTLastImageMethod afterLastImage = MNISTLastImageMethod.ResetToStart, int randomSeed = 0)
        {
            if (randomSeed == 0)
            {
                rand = new Random();
            }
            else
            {
                rand = new Random(randomSeed);
            }

            m_baseFolder = baseFolder;
            m_trainingImages = new ArrayList();
            m_testImages = new ArrayList();
            m_afterLastImage = afterLastImage;
            m_trainingExamplesPerDigitCnt = trainingExamplesPerDigitCnt;
            m_testExamplesPerDigitCnt = testExamplesPerDigitCnt;
            m_lastServedImage = -1;
            m_sequenceIterator = 0;
            m_definedOrder = false;

            // START TIME MEASUREMENT ----------------------------------------------------------
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            ReadMnistSet("train-images.idx3-ubyte", "train-labels.idx1-ubyte", m_trainingExamplesPerDigitCnt, m_trainingImages);
            ReadMnistSet("t10k-images.idx3-ubyte", "t10k-labels.idx1-ubyte", m_testExamplesPerDigitCnt, m_testImages);

            



            byte[,] data = new byte[28, 28];
            m_blankImage = new MyMNISTImage(data, 0);

            m_trainingImagesEnumerator = m_trainingImages.GetEnumerator();
            m_testImagesEnumerator = m_testImages.GetEnumerator();

            //sw.Stop();
            //Console.WriteLine("Elapsed={0}", sw.Elapsed);

      
        }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="baseFolder">Base folder with MNIST dataset files</param>
        /// <param name="imagesCnt">How many images to load</param>
        /// <param name="exact">If TRUE, you will get exactly imagesCnt images. If FALSE, you will get AT MOST imagesCnt images. It's here for performance reason and BC</param>
        /// <param name="afterLastImage">What to do, after the last values has been sent</param>
        public MyMNISTManager(string baseFolder, int imagesCnt = int.MaxValue, bool exact = false, MNISTLastImageMethod afterLastImage = MNISTLastImageMethod.ResetToStart)
        {
            m_baseFolder       = baseFolder;
            m_images           = new ArrayList();
            m_afterLastImage   = afterLastImage;
            m_imagesDemand     = imagesCnt;
            m_imagesServed     = 0;
            m_sequenceIterator = 0;
            m_definedOrder     = false;

            FileStream ifsTrainLabels = new FileStream(m_baseFolder + "train-labels.idx1-ubyte", FileMode.Open, FileAccess.Read);
            FileStream ifsTrainImages = new FileStream(m_baseFolder + "train-images.idx3-ubyte", FileMode.Open, FileAccess.Read);

            BinaryReader brTrainLabels = new BinaryReader(ifsTrainLabels);
            BinaryReader brTrainImages = new BinaryReader(ifsTrainImages);

            //Magic number
            brTrainLabels.ReadInt32();
            brTrainImages.ReadInt32();

            int numImagesTrainLables = brTrainLabels.ReadInt32();

            numImagesTrainLables = ReverseBytes(numImagesTrainLables);
            int numImagesTrainImages = brTrainImages.ReadInt32();

            numImagesTrainImages = ReverseBytes(numImagesTrainImages);

            int numRowsTrainImages = brTrainImages.ReadInt32();

            numRowsTrainImages = ReverseBytes(numRowsTrainImages);
            int numColsTrainImages = brTrainImages.ReadInt32();

            numColsTrainImages = ReverseBytes(numColsTrainImages);

            int maxImages;

            if (exact)
            {
                // numImagesTrainImages = 60000
                maxImages = numImagesTrainImages;
            }
            else
            {
                // value of 2000 is a compromise between long loading-time for maximum of 60k images and minimum of user set "imagesCnt"
                // this also brings more flexibility for changing the m_imagesDemand during simulation (up to max(2000,imagesCnt) instead of imagesCnt)
                maxImages = Math.Max(2000, Math.Min(numImagesTrainImages, imagesCnt));
            }

            byte[][] data = new byte[numColsTrainImages][];
            for (int i = 0; i < data.Length; ++i)
            {
                data[i] = new byte[numRowsTrainImages];
            }

            for (int i = 0; i < maxImages; ++i)
            {
                for (int j = 0; j < numColsTrainImages; ++j)
                {
                    for (int k = 0; k < numRowsTrainImages; ++k)
                    {
                        byte b = brTrainImages.ReadByte();
                        data[j][k] = b;
                    }
                }

                byte         label  = brTrainLabels.ReadByte();
                MyMNISTImage mImage = new MyMNISTImage(data, label, numColsTrainImages, numRowsTrainImages);
                m_images.Add(mImage);
            }

            ifsTrainImages.Close();
            brTrainImages.Close();
            ifsTrainLabels.Close();
            brTrainLabels.Close();

            m_imageEnumerator = m_images.GetEnumerator();

            for (int i = 0; i < numColsTrainImages; ++i)
            {
                for (int j = 0; j < numRowsTrainImages; ++j)
                {
                    data[i][j] = 0;
                }
            }
            m_blankImage = new MyMNISTImage(data, 0);
        }