Exemplo n.º 1
0
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]);
	}
}
Exemplo n.º 2
0
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);
}