void cuVoteMnist() { return; const int nclasses = 10; /*state and cublas handle*/ cublasHandle_t handle; init(handle); /*read the data from disk*/ cuMatrixVector<float>trainX; cuMatrixVector<float>testX; cuMatrix<int>* trainY, *testY; readMnistData(trainX, trainY, "mnist/train-images.idx3-ubyte", "mnist/train-labels.idx1-ubyte", 60000, 1); readMnistData(testX , testY, "mnist/t10k-images.idx3-ubyte", "mnist/t10k-labels.idx1-ubyte", 10000, 1); int ImgSize = trainX[0]->rows; Config::instance()->setImageSize(ImgSize - Config::instance()->getCrop()); const char* path[] = {"mnist_result_cfm_5/1/checkPoint.txt", "mnist_result_cfm_5/2/checkPoint.txt", "mnist_result_cfm_5/3/checkPoint.txt", "mnist_result_cfm_5/4/checkPoint.txt", "mnist_result_cfm_5/5/checkPoint.txt", "mnist_result_cfm_5/6/checkPoint.txt", "mnist_result_cfm_5/7/checkPoint.txt", "mnist_result_cfm_5/8/checkPoint.txt", "mnist_result_cfm_5/9/checkPoint.txt"}; const char* initPath[] = {"mnist_result_cfm_4/1/MnistConfig.txt", "mnist_result_cfm_5/2/MnistConfig.txt", "mnist_result_cfm_5/3/MnistConfig.txt", "mnist_result_cfm_5/4/MnistConfig.txt", "mnist_result_cfm_5/5/MnistConfig.txt", "mnist_result_cfm_5/6/MnistConfig.txt", "mnist_result_cfm_5/7/MnistConfig.txt", "mnist_result_cfm_5/8/MnistConfig.txt", "mnist_result_cfm_5/9/MnistConfig.txt"}; /*build CNN net*/ /* char* path[] = {"mnist_result_cfm_2/1_9967/checkPoint.txt", "mnist_result_cfm_2/2_9964/checkPoint.txt", "mnist_result_cfm_2/3_9966/checkPoint.txt", "mnist_result_cfm_2/4_9970/checkPoint.txt", "mnist_result_cfm_2/5_9967/checkPoint.txt", "mnist_result_cfm_2/6_9963/checkPoint.txt", "mnist_result_cfm_2/7_9965/checkPoint.txt", "mnist_result_cfm_2/8_9963/checkPoint.txt", "mnist_result_cfm_2/9_9964/checkPoint.txt"}; char* initPath[] = {"mnist_result_cfm_2/1_9967/MnistConfig.txt", "mnist_result_cfm_2/2_9964/MnistConfig.txt", "mnist_result_cfm_2/3_9966/MnistConfig.txt", "mnist_result_cfm_2/4_9970/MnistConfig.txt", "mnist_result_cfm_2/5_9967/MnistConfig.txt", "mnist_result_cfm_2/6_9963/MnistConfig.txt", "mnist_result_cfm_2/7_9965/MnistConfig.txt", "mnist_result_cfm_2/8_9963/MnistConfig.txt", "mnist_result_cfm_2/9_9964/MnistConfig.txt"}; */ /* ncfm char* path[] = {"mnist_result/1_9973/checkPoint.txt", "mnist_result/2_9972/checkPoint.txt", "mnist_result/3_9969/checkPoint.txt", "mnist_result/4_9968/checkPoint.txt", "mnist_result/5_9974/checkPoint.txt", "mnist_result/6_9973/checkPoint.txt", "mnist_result/7_9968/checkPoint.txt", "mnist_result/8_9968/checkPoint.txt", "mnist_result/9_9968/checkPoint.txt", "mnist_result/10_9976/checkPoint.txt", "mnist_result/11_9969/checkPoint.txt", "mnist_result/12_9968/checkPoint.txt", "mnist_result/13_9973/checkPoint.txt"}; char* initPath[] = {"mnist_result/1_9973/MnistConfig.txt", "mnist_result/2_9972/MnistConfig.txt", "mnist_result/3_9969/MnistConfig.txt", "mnist_result/4_9968/MnistConfig.txt", "mnist_result/5_9974/MnistConfig.txt", "mnist_result/6_9973/MnistConfig.txt", "mnist_result/7_9968/MnistConfig.txt", "mnist_result/8_9968/MnistConfig.txt", "mnist_result/9_9968/MnistConfig.txt", "mnist_result/10_9976/MnistConfig.txt", "mnist_result/11_9969/MnistConfig.txt", "mnist_result/12_9968/MnistConfig.txt", "mnist_result/13_9973/MnistConfig.txt"}; */ int numPath = sizeof(path) / sizeof(char*); int * mark = new int[1 << numPath]; memset(mark, 0, sizeof(int) * (1 << numPath)); std::vector<int>vCorrect; std::vector<cuMatrix<int>*>vPredict; for(int i = 0; i < numPath; i++) { Config::instance()->initPath(initPath[i]); int ImgSize = trainX[0]->rows; int crop = Config::instance()->getCrop(); int nsamples = trainX.size(); int batch = Config::instance()->getBatchSize(); vPredict.push_back(new cuMatrix<int>(testY->getLen(), nclasses, 1)); buildNetWork(trainX.size(), testX.size()); cuReadConvNet(ImgSize - crop, path[i], nclasses); int cur; // int cur = voteTestDate( // testX, // testY, // vPredict[i], // batch, // ImgSize, // nclasses, // handle); cuFreeCNNMemory(batch, trainX, testX); cuFreeConvNet(); vCorrect.push_back(cur); Config::instance()->clear(); printf("%d %s\n", cur, path[i]); } int max = -1; int val = 1; int cur; cuMatrix<int>* voteSum = new cuMatrix<int>(testY->getLen(), nclasses, 1); cuMatrix<int>* correct = new cuMatrix<int>(1, 1, 1); for(int m = (1 << numPath) - 1; m >= 1; m--) { int t = 0; for(int i = 0; i < numPath; i++){ if(m & (1 << i)){ t++; } } if(t != 5) continue; voteSum->gpuClear(); if(mark[m] != 0) { cur = mark[m]; for(int i = 0; i < numPath; i++) { if(!(m & (1 << i)))continue; printf("%d %s\n", vCorrect[i], path[i]); } } else { int v = 0; for(int i = numPath - 1; i >= 0; i--) { if(!(m & (1 << i)))continue; v = v | (1 << i); correct->gpuClear(); cur = cuVoteAdd(voteSum, vPredict[i], testY, correct, nclasses); mark[v] = cur; printf("%d %d %s\n", vCorrect[i], cur, path[i]); } } if(cur >= max) { max = cur; val = m; } printf("m = %d val = %d max = %d \n\n",m, val, max); } voteSum->gpuClear(); int m = val; for(int i = numPath - 1; i >= 0; i--) { if(!(m & (1 << i)))continue; correct->gpuClear(); cur = cuVoteAdd(voteSum, vPredict[i], testY, correct, nclasses); printf("%d %d %s\n", vCorrect[i], cur, path[i]); } }
void cuPredict() { const int nclasses = 10; const int ImgSize = 28; /*state and cublas handle*/ cublasHandle_t handle; init(handle); /*read the data from disk*/ cuMatrixVector<double> trainX; cuMatrixVector<double> testX; cuMatrix<double>* trainY, *testY; int num1 = readMnistData(trainX, trainY, "mnist/train-images.idx3-ubyte", "mnist/train-labels.idx1-ubyte", 60000, 0); int num2 = readMnistData(testX , testY, "mnist/t10k-images.idx3-ubyte", "mnist/t10k-labels.idx1-ubyte", 10000, 1); printf("train DataSize = %d, test DataSize = %d\n", num1, num2); /*build CNN net*/ int imgDim = trainX[0]->rows; int nsamples = trainX.size(); std::vector<cuCvl> ConvLayers; std::vector<cuNtw> HiddenLayers; cuSMR smr; int batch = 200; cuInitDistortionMemery(batch, ImgSize); //char* path[] = {"4_9962", "3_9951"}; //char* initPath[] = {"P4.txt", "P3.txt"}; //char* path[] = {"p/p1/net.txt", "p/p2/net.txt", "p/p3/net.txt", "p/p4/net.txt", "p/p5/net.txt", "p/p6/net.txt", "p/p7/net.txt"}; //char* initPath[] = {"p/p1/Pnet.txt", "p/p2/Pnet.txt", "p/p3/Pnet.txt", "p/p4/Pnet.txt", "p/p5/Pnet.txt", "p/p6/Pnet.txt", "p/p7/Pnet.txt"}; // char* path[] = {"p10_20_256_256/p1/net.txt", "p10_20_256_256/p2/net.txt", "p10_20_256_256/20w/net.txt", "p10_20_256_256/dl/net.txt", "p10_20_256_256/jk/net.txt", // "p10_20_256_256/lw/net.txt", "p10_20_256_256/lyx/net.txt", "p10_20_256_256/tdx/net.txt", "p10_20_256_256/wo/net.txt", // "p10_20_256_256/xh/net.txt", "p10_20_256_256/yy/net.txt","p10_20_256_256/wy/net.txt","p10_20_256_256/hk/net.txt"}; // char* initPath[] = {"p10_20_256_256/p1/Pnet.txt", "p10_20_256_256/p2/Pnet.txt", "p10_20_256_256/20w/Pnet.txt", "p10_20_256_256/dl/Pnet.txt", "p10_20_256_256/jk/Pnet.txt", // "p10_20_256_256/lw/Pnet.txt", "p10_20_256_256/lyx/Pnet.txt", "p10_20_256_256/tdx/Pnet.txt", "p10_20_256_256/wo/Pnet.txt", // "p10_20_256_256/xh/Pnet.txt", "p10_20_256_256/yy/Pnet.txt", "p10_20_256_256/wy/Pnet.txt", "p10_20_256_256/hk/Pnet.txt"}; char* path[] = {"p10_20_256_256/hk/2/net.txt", "p10_20_256_256/p1/net.txt", "p10_20_256_256/20w/net.txt", "p10_20_256_256/dl/net.txt", "p10_20_256_256/lw/net.txt", "p10_20_256_256/lw/1/net.txt", "p10_20_256_256/tdx/net.txt",/*"p10_20_256_256/lyx/net.txt",*/ /*"p10_20_256_256/yy/net.txt",*/ "p10_20_256_256/yy/1/net.txt", /*"p10_20_256_256/xh/1/net.txt",*/ "p10_20_256_256/dl/1/net.txt", "p10_20_256_256/hk/1/net.txt", "p10_20_256_256/xh/net.txt", "p10_20_256_256/20w/2/net.txt", "1/jk/net.txt", "1/dl/net.txt", "1/lw/net.txt", "1/xh/net.txt"}; char* initPath[] = {"p10_20_256_256/hk/2/Pnet.txt", "p10_20_256_256/p1/Pnet.txt", "p10_20_256_256/20w/Pnet.txt", "p10_20_256_256/dl/Pnet.txt", "p10_20_256_256/lw/Pnet.txt", "p10_20_256_256/lw/1/Pnet.txt", "p10_20_256_256/tdx/Pnet.txt", /*"p10_20_256_256/lyx/Pnet.txt",*/ /*"p10_20_256_256/yy/Pnet.txt",*/ "p10_20_256_256/yy/1/Pnet.txt",/*"p10_20_256_256/xh/1/Pnet.txt",*/ "p10_20_256_256/dl/1/Pnet.txt","p10_20_256_256/hk/1/Pnet.txt", "p10_20_256_256/xh/Pnet.txt", "p10_20_256_256/20w/2/Pnet.txt", "1/jk/Pnet.txt", "1/dl/Pnet.txt","1/lw/Pnet.txt","1/xh/Pnet.txt"}; // char* path[] = {"1/jk/net.txt", "1/dl/net.txt", "1/lw/net.txt", "1/xh/net.txt", "p10_20_256_256/lw/1/net.txt"}; // char*initPath[] = {"1/jk/Pnet.txt", "1/dl/Pnet.txt","1/lw/Pnet.txt","1/xh/Pnet.txt","p10_20_256_256/lw/1/Pnet.txt"}; int numPath = sizeof(path) / sizeof(char*); int * mark = new int[1 << numPath]; memset(mark, 0, sizeof(int) * (1 << numPath)); std::vector<int>vCorrect; std::vector<cuMatrix<double>*>vPredict; for(int i = 0; i < numPath; i++) { vPredict.push_back(new cuMatrix<double>(trainY->getLen(), 1)); cuReadConvNet(ConvLayers, HiddenLayers, smr, imgDim, nsamples, path[i], nclasses); cuInitCNNMemory(batch, trainX, testX, ConvLayers, HiddenLayers, smr, ImgSize, nclasses); int cur = cuPredictNetwork(trainX, trainY, ConvLayers, HiddenLayers, smr, 3e-3, testX, testY, vPredict[i],ImgSize, nsamples, batch, ImgSize, nclasses, handle); cuFreeCNNMemory(batch, trainX, testX, ConvLayers,HiddenLayers, smr); cuFreeConvNet(ConvLayers, HiddenLayers, smr); vCorrect.push_back(cur); printf("%d %s\n", cur, path[i]); } int max = -1; int val = 1; int cur; return; for(int m = (1 << numPath) - 1; m >= 1; m--) { //m = 14653; //m = 205; if(mark[m] != 0) { cur = mark[m]; for(int i = 0; i < numPath; i++) { if(!(m & (1 << i)))continue; printf("%d %s\n", vCorrect[i], path[i]); } } else { int v = 0; for(int i = numPath - 1; i >= 0; i--) { if(!(m & (1 << i)))continue; v = v | (1 << i); cur = cuPredictAdd(vPredict[i], testY, batch, ImgSize, nclasses); mark[v] = cur; printf("%d %d %s\n", vCorrect[i], cur, path[i]); } } if(cur >= max) { max = cur; val = m; } cuClearCorrectCount(); printf("m = %d val = %d max = %d \n\n",m, val, max); } cuClearCorrectCount(); int m = val; for(int i = numPath - 1; i >= 0; i--) { if(!(m & (1 << i)))continue; cur = cuPredictAdd(vPredict[i], testY, batch, ImgSize, nclasses); printf("%d %d %s\n", vCorrect[i], cur, path[i]); } cuShowInCorrect(testX, testY, ImgSize, nclasses); }