Foam::tmp<Foam::scalarField> Foam::TPS::weights ( const vectorField& controlPoints, const vector& dataPoint ) const { scalarField dist = mag(controlPoints - dataPoint); scalarField RBF(dist.size()); forAll(RBF, i) { if (dist[i] > SMALL) { RBF[i] = sqr(dist[i])*log(dist[i]); } else { RBF[i] = 0.0; } } return RBF; }
int main(int argc, char* argv[]){ //float beta; //int row,col; string file_name = FILE_NAME; HostMatrix<float> X; HostMatrix<float> X_test; HostMatrix<float> Y; HostMatrix<float> Y_test; HostMatrix<float> Input; HostMatrix<float> Target; std::map<string,int> Classes; std::map<int,string> ClassesLookup; readFile(file_name,Input,Target,Classes,ClassesLookup); int kfold = 1; int correct_instances = 0; int incorrect_instances = 0; int total_instances = 0; int **confusionMatrix; confusionMatrix = (int**) malloc(sizeof(int*)*Classes.size()); for(int i = 0; i < (int)Classes.size(); i++){ confusionMatrix[i] = (int*) malloc(sizeof(int)*Classes.size()); memset(confusionMatrix[i],0,sizeof(int)*Classes.size()); } float Pet_mean = 0; float Ped_mean = 0; unsigned int seed = (unsigned)time(0); /***************RUN INFORMATION*************/ writeHeader(Input,Classes.size(),seed); /*******************************************/ if(!InitCUDA()) { return 1; } culaStatus status; status = culaInitialize(); std::cout << "Starting " << std::endl; float center_time = 0; float width_time = 0; float weight_time = 0; float scaling_time = 0; unsigned int time_total = 0; unsigned int testing_time = 0; unsigned int training_time = 0; clock_t initialTimeTotal = clock(); do{ X = crossvalidationTrain(Input,KFOLDS,kfold); X_test = crossvalidationTest(Input,KFOLDS,kfold); Y = crossvalidationTrain(Target,KFOLDS,kfold); Y_test = crossvalidationTest(Target,KFOLDS,kfold); HostMatrix<float> Weights; HostMatrix<float> Centers; /*Train Network*/ clock_t initialTime = clock(); RadialBasisFunction RBF(NETWORK_SIZE,RNEIGHBOURS,SCALING_FACTOR,Classes.size()); RBF.SetSeed(seed); RBF.Train(X,Y); training_time = (clock() - initialTime); center_time += RBF.times[0]; width_time += RBF.times[1]; weight_time += RBF.times[2]; scaling_time += RBF.times[3]; /*Test Network*/ initialTime = clock(); std::cout << "Testing" << std::endl; HostMatrix<float> out_test; out_test = RBF.Test(X_test); for(int i = 0; i< X_test.Rows();i++){ float max = 0; float out_class = 0; for(int j = 0; j < (int) Classes.size(); j++){ if(out_test(i,j) > max){ out_class = (float)j; max = out_test(i,j); } } out_test(i,0) = out_class+1; } for (int i = 0; i < out_test.Rows(); i++) { out_test(i,0) = (float)round(out_test(i,0)); if(out_test(i,0) <= 0) out_test(i,0) = 1; if(out_test(i,0) > Classes.size()) out_test(i,0) = (float)Classes.size(); std::cout << Y_test(i,0) << " " << out_test(i,0) << std::endl; } correct_instances += out_test.Rows() - error_calc(Y_test,out_test); incorrect_instances += error_calc(Y_test,out_test); total_instances += out_test.Rows(); /*Add values to Confusion Matrix*/ for(int i = 0; i < Y_test.Rows(); i++){ confusionMatrix[((int)Y_test(i,0))-1][((int)out_test(i,0))-1] = confusionMatrix[((int)Y_test(i,0))-1][((int)out_test(i,0))-1] + 1; } testing_time = (clock() - initialTime); /*Increment fold number, for use in crossvalidation*/ kfold++; }while(kfold <= KFOLDS); time_total = (clock() - initialTimeTotal); /*****************MEASURES****************/ measures(correct_instances,total_instances,incorrect_instances,confusionMatrix,Classes,ClassesLookup); writeFooter(center_time,width_time,weight_time,scaling_time,training_time,testing_time,time_total); culaShutdown(); cudaThreadExit(); return 0; }