void copyResultToBuffer(uint8_t* to, uint32_t start, uint32_t size){ unsigned int datReg=FLASH_DATA; unsigned int data=0; unsigned int dataByte; for(uint8_t i=0;i<size;i++){ if(i%4==0) { data=changeEndian(_lr(datReg)); datReg++; } dataByte=WRITE_TO_BUFFER_MASK & data; dataByte=dataByte>>24; to[start+i]|=(uint8_t)dataByte; data=data<<8; } }
void MNISTDataset::loadData(const char *trainingDataFile, const char *trainingLabelFile){ int magicNum, numImage, numRow, numCol; uint8_t pixel, label; FILE *traingDataFd = fopen(trainingDataFile, "rb"); //读入样本数据,50000个做training,10000个做validate printf("loading training data...\n"); fread(&magicNum, sizeof(int), 1, traingDataFd); magicNum = changeEndian(magicNum); printf("magic number : %d\n", magicNum); fread(&numImage, sizeof(int), 1, traingDataFd); numImage = changeEndian(numImage); printf("number of images : %d\n", numImage); fread(&numRow, sizeof(int), 1, traingDataFd); numRow = changeEndian(numRow); printf("number of rows: %d\n", numRow); fread(&numCol, sizeof(int), 1, traingDataFd); numCol = changeEndian(numCol); printf("number of columns : %d\n", numCol); numFeature = numRow * numCol; numTrain = 50000; numValid = 10000; trainingData = new double[numTrain*numFeature]; validateData = new double[numValid*numFeature]; for(int i = 0; i < numTrain; i++) for(int j = 0; j < numFeature; j++){ fread(&pixel, sizeof(uint8_t), 1, traingDataFd); trainingData[numFeature*i+j] = pixel / 255.0; //除以255.0进行归一化 } for(int i = 0; i < numValid; i++) for(int j = 0; j < numFeature; j++){ fread(&pixel, sizeof(uint8_t), 1, traingDataFd); validateData[numFeature*i+j] = pixel / 255.0; } fclose(traingDataFd); printf("loading training label...\n"); FILE *traingLabelFd = fopen(trainingLabelFile, "rb"); fread(&magicNum, sizeof(int), 1, traingLabelFd); magicNum = changeEndian(magicNum); printf("magic number : %d\n", magicNum); fread(&numImage, sizeof(int), 1, traingLabelFd); numImage = changeEndian(numImage); printf("number of images : %d\n", numImage); numLabel = 10; trainingLabel = new double[numTrain*numLabel]; validateLabel = new double[numValid*numLabel]; memset(trainingLabel, 0, numTrain*numLabel*sizeof(double)); memset(validateLabel, 0, numValid*numLabel*sizeof(double)); for(int i = 0; i < numTrain; i++){ fread(&label, sizeof(uint8_t), 1, traingLabelFd); trainingLabel[i*numLabel+label] = 1.0; } for(int i = 0; i < numValid; i++){ fread(&label, sizeof(uint8_t), 1, traingLabelFd); validateLabel[i*numLabel+label] = 1.0; } fclose(traingLabelFd); printf("loading ok...\n"); }