C++读取MNIST 数据

可以到这里下载数据:

http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_download.html

 

#include

class CIDX3UBYTE
{
public:
    CIDX3UBYTE(char * strFile)
    {
        m_nFileLen = filesize(strFile);


        //{
            FILE * file_TrainImage = fopen(strFile, "rb");

            fread(&nMagic_Num, 1, 4, file_TrainImage);
            fread(&Num_of_images, 1, 4, file_TrainImage);
            fread(&nWidth, 1, 4, file_TrainImage);
            fread(&nHeight, 1, 4, file_TrainImage);

            //fclose(file_TrainImage);

            BigToLittle32(&nMagic_Num);
            BigToLittle32(&Num_of_images);
            BigToLittle32(&nWidth);
            BigToLittle32(&nHeight);
        //}


        {
            for ( int n = 0; n             {
                unsigned char * pTempImageBuf = new unsigned char[nWidth*nHeight]; //测试图像是单字节;

                if (pTempImageBuf)
                {
                    m_vector_ImageBuf.push_back(pTempImageBuf);
                }
            }
        }


        {
            int nImageSize = nWidth * nHeight;


            for ( int n = 0; n             {
                fread(m_vector_ImageBuf.at(n), 1, nImageSize, file_TrainImage);

                if(0)
                {
                    static FILE * fTemp = fopen("test_iamgebuf.images", "w+b");
                    fwrite(m_vector_ImageBuf.at(n), 1, nImageSize, fTemp);
                }
            }
        }


        fclose(file_TrainImage);

    }
    ~CIDX3UBYTE()
    {

        //清理内存;

    }

public:

    int nMagic_Num = 0;

    int Num_of_images = 0;

    int nWidth = 0;
    int nHeight = 0;
    
    std::vector m_vector_ImageBuf; //注意内存大小; 

private:
    int m_nFileLen;

private:
    long filesize(char * pFileName)
    {
        long int save_pos;
        long size_of_file;

        FILE * fp = fopen(pFileName, "r+b");

        save_pos = ftell(fp);

        fseek(fp, 0L, SEEK_END);

        size_of_file = ftell(fp);

        fseek(fp, save_pos, SEEK_SET);
        
        fclose(fp);

        return(size_of_file);
    }


    void read_buf_OneByOne() //这里的数值,必须按照顺序读取,不可以作为数值直接读取,大小端的问题;
    {
        //算了,还是用BigToLittle32转换一下吧;
    }

    void BigToLittle32(int * pN)
    {
        unsigned char nTemp[4] = {0};
        nTemp[0] = *(((unsigned char*)pN) + 3);
        nTemp[1] = *(((unsigned char*)pN) + 2);
        nTemp[2] = *(((unsigned char*)pN) + 1);
        nTemp[3] = *(((unsigned char*)pN) + 0);
        memcpy(pN, nTemp, 4);
    }


};

 


void CMFCApplication5Dlg::OnBnClickedButtonTest()
{

    CIDX3UBYTE CIDX3UBYTE_obj("E:\\WorkSpace\\MNIST\\train-images.idx3-ubyte");

}
 

 

一些简单的测试集文件格式信息,可以参考:https://www.cnblogs.com/liuzhan709/p/9320724.html

lable文件格式参考:https://blog.csdn.net/u014046170/article/details/47445919

没有宽高,后面就是一字节数据,0~9;

 

https://blog.csdn.net/u012507022/article/details/51376626

你可能感兴趣的:(TensorFlow)