예제 #1
0
파일: wrl-atom.cpp 프로젝트: rlk/thumb
void wrl::atom::save(app::node node)
{
    const vec3 x = xvector(default_M);
    const vec3 y = yvector(default_M);
    const vec3 z = zvector(default_M);
    const vec3 p = wvector(default_M);

    const quat q(mat3(x, y, z));

    // Add the entity transform to this element.

    app::node n;

    n = app::node("rot_x"); n.set_f(q[0]); n.insert(node);
    n = app::node("rot_y"); n.set_f(q[1]); n.insert(node);
    n = app::node("rot_z"); n.set_f(q[2]); n.insert(node);
    n = app::node("rot_w"); n.set_f(q[3]); n.insert(node);

    n = app::node("pos_x"); n.set_f(p[0]); n.insert(node);
    n = app::node("pos_y"); n.set_f(p[1]); n.insert(node);
    n = app::node("pos_z"); n.set_f(p[2]); n.insert(node);

    if (body_id)
    {
        n = app::node("body");
        n.set_i(body_id);
        n.insert(node);
    }

    save_params(node);
}
예제 #2
0
/* ===================================================================*/
void flash_Init() {
	if (ButtonPressed) {
		// button pressed on power on -> Restore factory settings
		set_led(TOPSIDE, 0, MAGENTA);
		LEDred_ClrVal();
		LEDblue_ClrVal();
		write_ledColumn(TOPSIDE);
		wait_ledColumn();

		set_params();
		save_params();
		// initialize some images and scripts
		images_Init();
		script_Init();

		while (!ButtonReleased) {
			;
		}

		set_led(TOPSIDE, 0, BLACK);
		LEDred_SetVal();
		LEDblue_SetVal();
		write_ledColumn(TOPSIDE);
		wait_ledColumn();

	} else {
		get_params();
		if (configParameter.valid == FLASH_RECORD_VALID) {
			set_config();
		} else {
			// no valid data in Flash -> initialize from global variables
			set_params();
			save_params();
			// initialize some images and scripts
			images_Init();
			script_Init();
		}
	}
}
예제 #3
0
/* Train model */
int train_glove() {
    long long a, file_size;
    int b;
    FILE *fin;
    real total_cost = 0;
    fprintf(stderr, "TRAINING MODEL\n");
    
    fin = fopen(input_file, "rb");
    if(fin == NULL) {fprintf(stderr,"Unable to open cooccurrence file %s.\n",input_file); return 1;}
    fseeko(fin, 0, SEEK_END);
    file_size = ftello(fin);
    num_lines = file_size/(sizeof(CREC)); // Assuming the file isn't corrupt and consists only of CREC's
    fclose(fin);
    fprintf(stderr,"Read %lld lines.\n", num_lines);
    if(verbose > 1) fprintf(stderr,"Initializing parameters...");
    initialize_parameters();
    if(verbose > 1) fprintf(stderr,"done.\n");
    if(verbose > 0) fprintf(stderr,"vector size: %d\n", vector_size);
    if(verbose > 0) fprintf(stderr,"vocab size: %lld\n", vocab_size);
    if(verbose > 0) fprintf(stderr,"x_max: %lf\n", x_max);
    if(verbose > 0) fprintf(stderr,"alpha: %lf\n", alpha);
    pthread_t *pt = (pthread_t *)malloc(num_threads * sizeof(pthread_t));
    lines_per_thread = (long long *) malloc(num_threads * sizeof(long long));
    
    // Lock-free asynchronous SGD
    for(b = 0; b < num_iter; b++) {
        //fprintf(stderr,"iter: %d\n", b);
        total_cost = 0;
        for (a = 0; a < num_threads - 1; a++) lines_per_thread[a] = num_lines / num_threads;
        lines_per_thread[a] = num_lines / num_threads + num_lines % num_threads;
        for (a = 0; a < num_threads; a++) pthread_create(&pt[a], NULL, glove_thread, (void *)a);
        //fprintf(stderr,"iter: %d started threads \n", b);
        for (a = 0; a < num_threads; a++) pthread_join(pt[a], NULL);
        //fprintf(stderr,"iter: %d done threads \n", b);
        for (a = 0; a < num_threads; a++) total_cost += cost[a];

        //for (a = 0; a < num_threads; a++) fprintf(stderr,"T: %d, cost: %lf\n",a,cost[a]);
        
        fprintf(stderr,"iter: %03d, cost: %lf\n", b+1, total_cost/num_lines);
    }

    //fprintf(stderr,"returning to save params");
    return save_params();
}
예제 #4
0
/* ===================================================================*/
void set_Mode() {
	windowT win;

	operating_mode = MODE_BUTTON;
	clear_leds(TOPSIDE);
	LEDred_SetVal();
	LEDgreen_SetVal();
	LEDblue_SetVal();

	// button pressed
	while (! ButtonReleased) {
		// wait till button released
		wait_10ms(2);
	}

	if (ButtonLongPressed) {
		ButtonLongPressed = FALSE;

		// toggle low energy mode
		if (energy_mode == ENERGY_LOW || energy_mode == ENERGY_ALWAYS_ON) {
			if (energy_mode == ENERGY_LOW) {
				energy_mode = ENERGY_STANDARD;
			}
			set_led(TOPSIDE, LED1, WHITE);
			LEDred_ClrVal();
			LEDgreen_ClrVal();
			LEDblue_ClrVal();
			oled_setState(OLED_ON);
		} else {
			energy_mode = ENERGY_LOW;
			set_led(TOPSIDE, LED1, YELLOW);
			LEDred_ClrVal();
			LEDgreen_ClrVal();
			oled_setState(OLED_OFF);
		}
		write_ledColumn(TOPSIDE);
		wait_10ms(100);
		clear_leds(TOPSIDE);
		LEDred_SetVal();
		LEDgreen_SetVal();
		LEDblue_SetVal();
		write_ledColumn(TOPSIDE);
		wait_ledColumn();

		ButtonReleased = FALSE;
		ButtonPressed = FALSE;
		ButtonLongPressed = FALSE;		
		
	} else {
		// start/stop trip
		ButtonPressed = FALSE;
		ButtonReleased = FALSE;
		
		if (tripMode == TRIP_STOPPED) {
			// stopped -> start trip
			tripMode = TRIP_STARTED;
			chronoMode = TRIP_STARTED;
			set_led(TOPSIDE, LED1, GREEN);
			LEDgreen_ClrVal();
		} else {
			// started (or paused) -> stop trip
			tripMode = TRIP_STOPPED;
			chronoMode = TRIP_STOPPED;
			set_led(TOPSIDE, LED1, RED);
			LEDred_ClrVal();
			// save the configuration and data
			set_params();
			save_params();
		}
		write_ledColumn(TOPSIDE);
		
		wait_10ms(100);
		if (ButtonPressed) {
			// reset trip
			set_led(TOPSIDE, LED1, BLUE);
			LEDblue_ClrVal();
			LEDred_SetVal();
			LEDgreen_SetVal();
			write_ledColumn(TOPSIDE);
			tripDistance = 0.0;
			maxSpeed = 0.0;
			avgSpeed = 0.0;
			tripElevationGain = 0.0;
			maxAltitude = 0.0;
			chronoTime = 0.0;
			tripTime = 0.0;
			while (! ButtonReleased) {
				// wait till button released
				wait_10ms(2);
			}
			ButtonPressed = FALSE;
			ButtonReleased = FALSE;
			ButtonLongPressed = FALSE;		
			wait_10ms(100);
		}
		clear_leds(TOPSIDE);
		write_ledColumn(TOPSIDE);
		wait_ledColumn();
	}
	operating_mode = NORMAL;
}
예제 #5
0
파일: setup.c 프로젝트: dmtrkun/Andr
uchar setup_dstout(uchar para)
{
uchar status = 0, disp_stat = 0, i;
uchar incr_step = 0;
unsigned int val;
unsigned long *src,*dst;
	
	status = 0;
	disp_stat = 1;
	val = SetupImg.Timer[para].dst_out;

	RTclock.timer2 = SETUP_TOUT_MS; //4sec
	RTclock.timer = 1000; //4sec
	while((RTclock.timer2 > 0)&&(status < 2))
	{
		if(disp_stat == 1)
		{
			if(status != 0)
				lcd_write_cmd (0x0F);                 /* Display ctrl:Disp=ON,Curs/Blnk=ON */
			
			set_cursor (0, 0);
			sprintf(str,"TIMER%d CHANNEL  ",para);
			lcd_print ((const unsigned char*)str);					 

			set_cursor (0, 1);
			if ( val > 5)
				sprintf(str,"DISABLED        ");
			else
				sprintf(str,"%s          ",out_names[val]);
			lcd_print ((const unsigned char*)str);					 
			
			if(status != 0)
				set_cursor (1, 1);

			disp_stat = 0;
		}
		switch(get_evnt_queue())
		{
//			case WE_MODE:
//				lcd_write_cmd (0x0C);                 /* Display ctrl:Disp=ON,Curs/Blnk=OFF */
//				status = 2;
//				break;
			case WE_ENTER:
				status++;
				if(status > 1)
				{
					SetupImg.Timer[para].dst_out = val;
					save_params();
//					/* put checksum to the last halfword */
//					((unsigned short*)&SetupImg)[sizeof(SetupImg_t)/2 - 1] = crc16((unsigned char*)&SetupImg, sizeof(SetupImg_t) - 2);
//					src = (unsigned long*)&SetupImg;
//					dst = (unsigned long*)&BSR_setup_img_t;
//					for(i = 0;i<sizeof(SetupImg_t)/4;i++,dst++,src++)
//						*dst = *src;
////					memcpy(BSR_setup_img_t,SetupImg,sizeof(SetupImg_t));
					status = 0;
			  	lcd_write_cmd (0x0C);                 /* Display ctrl:Disp=ON,Curs/Blnk=OFF */
				}
				disp_stat = 1;
				break;
			case WE_UPHLD:
				incr_step = TRUE;
			case WE_UPKEY:
				if(status == 1)
				{
					if(val < 7)			 
						val++;
					else
						val=0;
        }
				disp_stat = 1;
				RTclock.timer2 = SETUP_TOUT_MS; //4sec
				break;
			case WE_DWNHLD:
				incr_step = TRUE;
			case WE_DWNKEY:
				if(status == 1)
				{
					if(val > 0)			 
						val--;
					else
						val=7;
        }
				disp_stat = 1;
				RTclock.timer2 = SETUP_TOUT_MS; //4sec
				break;
//			case WE_UPDWNREL:
// 				incr_step = 0;
//				RTclock.timer2 = SETUP_TOUT_MS; //4sec
//				break;
			default:
				break;
		}
	}
	lcd_write_cmd (0x0C);                 /* Display ctrl:Disp=ON,Curs/Blnk=OFF */
	return 0;
}
예제 #6
0
파일: setup.c 프로젝트: dmtrkun/Andr
uchar setup_end(uchar para)
{
uchar status = 0, disp_stat = 0, i;
uchar incr_step = 0;
unsigned int val;
unsigned long *src,*dst;
RTCTime timeval;
	
	status = 0;
	disp_stat = 1;

	timeval.RTC_Hour = SetupImg.Timer[para].end/3600;
	val = SetupImg.Timer[para].end%3600 ;
	timeval.RTC_Min = val/60;
	timeval.RTC_Sec = val%60;
	RTclock.timer2 = SETUP_TOUT_MS; //4sec
	RTclock.timer = 1000; //4sec
	while((RTclock.timer2 > 0)&&(status < 4))
	{
		if(disp_stat == 1)
		{
			if(status != 0)
				lcd_write_cmd (0x0F);                 /* Display ctrl:Disp=ON,Curs/Blnk=ON */
			
			set_cursor (0, 0);
			sprintf(str,"TIMER1 END    ");
			lcd_print ((const unsigned char*)str);					 

	  	set_cursor (0, 1);
			sprintf(str,"%02d:%02d:%02d        ",timeval.RTC_Hour,timeval.RTC_Min,timeval.RTC_Sec);
			lcd_print ((const unsigned char*)str);					 
			
			if(status>2)
				set_cursor (7, 1);
			else if(status>1)
				set_cursor (4, 1);
			else if(status>0)
				set_cursor (1, 1);

			disp_stat = 0;
		}
		switch(get_evnt_queue())
		{
//			case WE_MODE:
//				lcd_write_cmd (0x0C);                 /* Display ctrl:Disp=ON,Curs/Blnk=OFF */
//				status = 4;
//				break;
			case WE_ENTER:
				status++;
				if(status == 3)
					timeval.RTC_Sec = 0;
				if(status > 3)
				{
					SetupImg.Timer[para].end = timeval.RTC_Hour*60*60+ timeval.RTC_Min*60 + timeval.RTC_Sec;
					save_params();
//					/* put checksum to the last halfword */
//					((unsigned short*)&SetupImg)[sizeof(SetupImg_t)/2 - 1] = crc16((unsigned char*)&SetupImg, sizeof(SetupImg_t) - 2);
//					src = (unsigned long*)&SetupImg;
//					dst = (unsigned long*)&BSR_setup_img_t;
//					for(i = 0;i<sizeof(SetupImg_t)/4;i++,dst++,src++)
//						*dst = *src;
////					memcpy(BSR_setup_img_t,SetupImg,sizeof(SetupImg_t));
					status = 0;
			  	lcd_write_cmd (0x0C);                 /* Display ctrl:Disp=ON,Curs/Blnk=OFF */
				}
				disp_stat = 1;
				break;
			case WE_UPHLD:
				incr_step = TRUE;
			case WE_UPKEY:
				if(status == 1)
				{
					if((timeval.RTC_Hour) < 23)
						timeval.RTC_Hour++;
        }
				else if(status == 2)
				{
					if((timeval.RTC_Min) < 59)
						timeval.RTC_Min++;
        }
				else if(status == 3)
				{
					if((timeval.RTC_Sec) < 59)
						timeval.RTC_Sec++;
        }
				disp_stat = 1;
				RTclock.timer2 = SETUP_TOUT_MS; //4sec
				break;
			case WE_DWNHLD:
				incr_step = TRUE;
			case WE_DWNKEY:
				if(status == 1)
				{
					if((timeval.RTC_Hour) > 0)
						timeval.RTC_Hour--;
        }
				else if(status == 2)
				{
					if((timeval.RTC_Min) > 0)
						timeval.RTC_Min--;
        }
				else if(status == 3)
				{
					if((timeval.RTC_Sec) > 0)
						timeval.RTC_Sec--;
        }
				disp_stat = 1;
				RTclock.timer2 = SETUP_TOUT_MS; //4sec
				break;
//			case WE_UPDWNREL:
// 				incr_step = 0;
//				RTclock.timer2 = SETUP_TOUT_MS; //4sec
//				break;
			default:
				break;
		}
	}
	lcd_write_cmd (0x0C);                 /* Display ctrl:Disp=ON,Curs/Blnk=OFF */
	return 0;
}
예제 #7
0
파일: feature.c 프로젝트: edechter/PRISM
/* main loop */
static int run_grd(CRF_ENG_PTR crf_ptr) {
	int r,iterate,old_valid,converged,conv_time,saved = 0;
	double likelihood,old_likelihood = 0.0;
	double crf_max_iterate = 0.0;
	double tmp_epsilon,alpha0,gf_sd,old_gf_sd = 0.0;

	config_crf(crf_ptr);

	initialize_weights();

	if (crf_learn_mode == 1) {
		initialize_LBFGS();
		printf("L-BFGS mode\n");
	}

	if (crf_learning_rate==1) {
		printf("learning rate:annealing\n");
	} else if (crf_learning_rate==2) {
		printf("learning rate:backtrack\n");
	} else if (crf_learning_rate==3) {
		printf("learning rate:golden section\n");
	}

	if (max_iterate == -1) {
		crf_max_iterate = DEFAULT_MAX_ITERATE;
	} else if (max_iterate >= +1) {
		crf_max_iterate = max_iterate;
	}

	for (r = 0; r < num_restart; r++) {
		SHOW_PROGRESS_HEAD("#crf-iters", r);

		initialize_crf_count();
		initialize_lambdas();
		initialize_visited_flags();

		old_valid = 0;
		iterate = 0;
		tmp_epsilon = crf_epsilon;

		LBFGS_index = 0;
		conv_time = 0;

		while (1) {
			if (CTRLC_PRESSED) {
				SHOW_PROGRESS_INTR();
				RET_ERR(err_ctrl_c_pressed);
			}

			RET_ON_ERR(crf_ptr->compute_feature());

			crf_ptr->compute_crf_probs();

			likelihood = crf_ptr->compute_likelihood();

			if (verb_em) {
				prism_printf("Iteration #%d:\tlog_likelihood=%.9f\n", iterate, likelihood);
			}

			if (debug_level) {
				prism_printf("After I-step[%d]:\n", iterate);
				prism_printf("likelihood = %.9f\n", likelihood);
				print_egraph(debug_level, PRINT_EM);
			}

			if (!isfinite(likelihood)) {
				emit_internal_error("invalid log likelihood: %s (at iteration #%d)",
				                    isnan(likelihood) ? "NaN" : "infinity", iterate);
				RET_ERR(ierr_invalid_likelihood);
			}
			/*        if (old_valid && old_likelihood - likelihood > prism_epsilon) {
					  emit_error("log likelihood decreased [old: %.9f, new: %.9f] (at iteration #%d)",
					  old_likelihood, likelihood, iterate);
					  RET_ERR(err_invalid_likelihood);
					  }*/
			if (likelihood > 0.0) {
				emit_error("log likelihood greater than zero [value: %.9f] (at iteration #%d)",
				           likelihood, iterate);
				RET_ERR(err_invalid_likelihood);
			}

			if (crf_learn_mode == 1 && iterate > 0) restore_old_gradient();

			RET_ON_ERR(crf_ptr->compute_gradient());

			if (crf_learn_mode == 1 && iterate > 0) {
				compute_LBFGS_y_rho();
				compute_hessian(iterate);
			} else if (crf_learn_mode == 1 && iterate == 0) {
				initialize_LBFGS_q();
			}

			converged = (old_valid && fabs(likelihood - old_likelihood) <= prism_epsilon);

			if (converged || REACHED_MAX_ITERATE(iterate)) {
				break;
			}

			old_likelihood = likelihood;
			old_valid = 1;

			if (debug_level) {
				prism_printf("After O-step[%d]:\n", iterate);
				print_egraph(debug_level, PRINT_EM);
			}

			SHOW_PROGRESS(iterate);

			if (crf_learning_rate == 1) { // annealing
				tmp_epsilon = (annealing_weight / (annealing_weight + iterate)) * crf_epsilon;
			} else if (crf_learning_rate == 2) { // line-search(backtrack)
				if (crf_learn_mode == 1) {
					gf_sd = compute_gf_sd_LBFGS();
				} else {
					gf_sd = compute_gf_sd();
				}
				if (iterate==0) {
					alpha0 = 1;
				} else {
					alpha0 = tmp_epsilon * old_gf_sd / gf_sd;
				}
				if (crf_learn_mode == 1) {
					tmp_epsilon = line_search_LBFGS(crf_ptr,alpha0,crf_ls_rho,crf_ls_c1,likelihood,gf_sd);
				} else {
					tmp_epsilon = line_search(crf_ptr,alpha0,crf_ls_rho,crf_ls_c1,likelihood,gf_sd);
				}

				if (tmp_epsilon < EPS) {
					emit_error("invalid alpha in line search(=0.0) (at iteration #%d)",iterate);
					RET_ERR(err_line_search);
				}
				old_gf_sd = gf_sd;
			} else if (crf_learning_rate == 3) { // line-search(golden section)
				if (crf_learn_mode == 1) {
					tmp_epsilon = golden_section_LBFGS(crf_ptr,0,crf_golden_b);
				} else {
					tmp_epsilon = golden_section(crf_ptr,0,crf_golden_b);
				}
			}
			crf_ptr->update_lambdas(tmp_epsilon);

			iterate++;
		}

		SHOW_PROGRESS_TAIL(converged, iterate, likelihood);

		if (r == 0 || likelihood > crf_ptr->likelihood) {
			crf_ptr->likelihood = likelihood;
			crf_ptr->iterate    = iterate;

			saved = (r < num_restart - 1);
			if (saved) {
				save_params();
			}
		}
	}

	if (crf_learn_mode == 1) clean_LBFGS();
	INIT_VISITED_FLAGS;
	return BP_TRUE;
}
예제 #8
0
파일: glove.c 프로젝트: currylym/ngram2vec
/* Train model */
int train_glove() {
    long long a, file_size;
    int save_params_return_code;
    int b;
    FILE *fin;
    real total_cost = 0;

    fprintf(stderr, "TRAINING MODEL\n");
    
    fin = fopen(input_file, "rb");
    if (fin == NULL) {fprintf(stderr,"Unable to open cooccurrence file %s.\n",input_file); return 1;}
    fseeko(fin, 0, SEEK_END);
    file_size = ftello(fin);
    num_lines = file_size/(sizeof(CREC)); // Assuming the file isn't corrupt and consists only of CREC's
    fclose(fin);
    
    fprintf(stderr,"Read %lld lines.\n", num_lines);
    if (verbose > 1) fprintf(stderr,"Initializing parameters...");
    initialize_parameters();
    if (verbose > 1) fprintf(stderr,"done.\n");
    if (verbose > 0) fprintf(stderr,"vector size: %d\n", vector_size);
    //!@#$%^&*
    if (verbose > 0) fprintf(stderr,"words size: %lld\n", words_size);
    if (verbose > 0) fprintf(stderr,"contexts size: %lld\n", contexts_size);
    if (verbose > 0) fprintf(stderr,"x_max: %lf\n", x_max);
    if (verbose > 0) fprintf(stderr,"alpha: %lf\n", alpha);
    pthread_t *pt = (pthread_t *)malloc(num_threads * sizeof(pthread_t));
    lines_per_thread = (long long *) malloc(num_threads * sizeof(long long));
    
    time_t rawtime;
    struct tm *info;
    char time_buffer[80];
    // Lock-free asynchronous SGD
    for (b = 0; b < num_iter; b++) {
        total_cost = 0;
        for (a = 0; a < num_threads - 1; a++) lines_per_thread[a] = num_lines / num_threads;
        lines_per_thread[a] = num_lines / num_threads + num_lines % num_threads;
        long long *thread_ids = (long long*)malloc(sizeof(long long) * num_threads);
        for (a = 0; a < num_threads; a++) thread_ids[a] = a;
        for (a = 0; a < num_threads; a++) pthread_create(&pt[a], NULL, glove_thread, (void *)&thread_ids[a]);
        for (a = 0; a < num_threads; a++) pthread_join(pt[a], NULL);
        for (a = 0; a < num_threads; a++) total_cost += cost[a];
        free(thread_ids);

        time(&rawtime);
        info = localtime(&rawtime);
        strftime(time_buffer,80,"%x - %I:%M.%S%p", info);
        fprintf(stderr, "%s, iter: %03d, cost: %lf\n", time_buffer,  b+1, total_cost/num_lines);

        if (checkpoint_every > 0 && (b + 1) % checkpoint_every == 0) {
            fprintf(stderr,"    saving itermediate parameters for iter %03d...", b+1);
            save_params_return_code = save_params(b+1);
            if (save_params_return_code != 0)
                return save_params_return_code;
            fprintf(stderr,"done.\n");
        }

    }
    free(pt);
    free(lines_per_thread);
    return save_params(0);

}
예제 #9
0
/* ===================================================================*/
void clear_params() {

	configParameter.valid = 0;
	save_params();
}
예제 #10
0
 void save_params(FILE* ofile) {
   save_params(ofile, n_examples);
 }
예제 #11
0
int main(int argc, char **argv)
{
  LR_PARAM   input_params;
  long int   i,j, m, d;
  double     *w, *Y, **X, precision,  *h, Erreur, Precision, Rappel, F, PosPred, PosEffect, PosEffPred;
  char input_filename[200], params_filename[200];

    srand(time(NULL));
  // Reading the parameters line
  lire_commande(&input_params,input_filename, params_filename,argc, argv);
  // Scan of the training file 
  // definition in utilitaire.c
  FileScan(input_filename,&m,&d);
  printf("Training set containing %ld examples in dimension %ld\n",m,d);

  Y  = (double *)  malloc((m+1)*sizeof(double ));
  X  = (double **) malloc((m+1)*sizeof(double *));
  if(!X){
    printf("Memory allocation problem (1)\n");
    exit(0);
  }
  X[1]=(double *)malloc((size_t)((m*d+1)*sizeof(double)));
  if(!X[1]){
    printf("Memory allocation problem (2)\n");
    exit(0);
  }
  for(i=2; i<=m; i++)
    X[i]=X[i-1]+d;

  w  = (double *) malloc((d+1) * sizeof(double ));

  // Loading of the data matrix procedure defined in utilitaire.c
  ChrgMatrix(input_filename, m, d, X, Y);

  // Adaline algorithm
  adaline(X, Y, w, m, d, input_params.eta, input_params.T);
  h = (double *)  malloc((m+1)*sizeof(double ));
  for(i=1; i<=m; i++)
    /*@$\rhd h_t(\mathbf{x}_i)\leftarrow w^{(t)}_0+\left\langle \boldsymbol w^{(t)},\mathbf{x}_i\right\rangle$@*/
      for(h[i]=w[0], j=1; j<=d; j++)
          h[i]+=(w[j]*X[i][j]);
    
    for(i = 1, Erreur = 0.0; i <= m; ++i) {
	    Erreur += (Y[i] - h[i]) * (Y[i] - h[i]);
    }
    Erreur /= (double)m;
    printf("Erreur=%lf\n", Erreur);
    
  /*
  for(i=1,PosPred=PosEffect=PosEffPred=Erreur=0.0; i<=m; i++){
     if(Y[i]*h[i]<=0.0)
         Erreur+=1.0;
     if(Y[i]==1.0){
         PosEffect++;
         if(h[i]>0.0)
            PosEffPred++;
     }
     if(h[i]>0.0)
         PosPred++;
  }
    
  Erreur/=(double)m;
  Precision=PosEffPred/PosPred;
  Rappel=PosEffPred/PosEffect;
  F=2.0*Precision*Rappel/(Precision+Rappel);
    
  printf("Precision:%lf Recall:%lf F1-measure:%lf Error=%lf\n",Precision,Rappel,F,Erreur);
    
  */
  free((char *)h);

  save_params(params_filename, w,d);

  return 1;
}
예제 #12
0
파일: em_ml.c 프로젝트: davidvaz/yap-cmake
int run_em(EM_ENG_PTR em_ptr)
{
    int     r, iterate, old_valid, converged, saved = 0;
    double  likelihood, log_prior;
    double  lambda, old_lambda = 0.0;

    config_em(em_ptr);

    for (r = 0; r < num_restart; r++) {
        SHOW_PROGRESS_HEAD("#em-iters", r);

        initialize_params();
        itemp = daem ? itemp_init : 1.0;
        iterate = 0;

        /* [21 Aug 2007, by yuizumi]
         * while-loop for inversed temperature (DAEM).  Note that this
         * loop is evaluated only once for EM without annealing, since
         * itemp initially set to 1.0 by the code above.
         */
        while (1) {
            if (daem) {
                SHOW_PROGRESS_TEMP(itemp);
            }
            old_valid = 0;

            while (1) {
                if (CTRLC_PRESSED) {
                    SHOW_PROGRESS_INTR();
                    RET_ERR(err_ctrl_c_pressed);
                }

                RET_ON_ERR(em_ptr->compute_inside());
                RET_ON_ERR(em_ptr->examine_inside());

                likelihood = em_ptr->compute_likelihood();
                log_prior  = em_ptr->smooth ? em_ptr->compute_log_prior() : 0.0;
                lambda = likelihood + log_prior;

                if (verb_em) {
                    if (em_ptr->smooth) {
                        prism_printf("Iteration #%d:\tlog_likelihood=%.9f\tlog_prior=%.9f\tlog_post=%.9f\n", iterate, likelihood, log_prior, lambda);
                    }
                    else {
                        prism_printf("Iteration #%d:\tlog_likelihood=%.9f\n", iterate, likelihood);
                    }
                }

                if (debug_level) {
                    prism_printf("After I-step[%d]:\n", iterate);
                    prism_printf("likelihood = %.9f\n", likelihood);
                    print_egraph(debug_level, PRINT_EM);
                }

                if (!isfinite(lambda)) {
                    emit_internal_error("invalid log likelihood or log post: %s (at iteration #%d)",
                                        isnan(lambda) ? "NaN" : "infinity", iterate);
                    RET_ERR(ierr_invalid_likelihood);
                }
                if (old_valid && old_lambda - lambda > prism_epsilon) {
                    emit_error("log likelihood or log post decreased [old: %.9f, new: %.9f] (at iteration #%d)",
                               old_lambda, lambda, iterate);
                    RET_ERR(err_invalid_likelihood);
                }
                if (itemp == 1.0 && likelihood > 0.0) {
                    emit_error("log likelihood greater than zero [value: %.9f] (at iteration #%d)",
                               likelihood, iterate);
                    RET_ERR(err_invalid_likelihood);
                }

                converged = (old_valid && lambda - old_lambda <= prism_epsilon);
                if (converged || REACHED_MAX_ITERATE(iterate)) {
                    break;
                }

                old_lambda = lambda;
                old_valid  = 1;

                RET_ON_ERR(em_ptr->compute_expectation());

                if (debug_level) {
                    prism_printf("After O-step[%d]:\n", iterate);
                    print_egraph(debug_level, PRINT_EM);
                }

                SHOW_PROGRESS(iterate);
                RET_ON_ERR(em_ptr->update_params());
                iterate++;
            }

            /* [21 Aug 2007, by yuizumi]
             * Note that 1.0 can be represented exactly in IEEE 754.
             */
            if (itemp == 1.0) {
                break;
            }
            itemp *= itemp_rate;
            if (itemp >= 1.0) {
                itemp = 1.0;
            }
        }

        SHOW_PROGRESS_TAIL(converged, iterate, lambda);

        if (r == 0 || lambda > em_ptr->lambda) {
            em_ptr->lambda     = lambda;
            em_ptr->likelihood = likelihood;
            em_ptr->iterate    = iterate;

            saved = (r < num_restart - 1);
            if (saved) {
                save_params();
            }
        }
    }

    if (saved) {
        restore_params();
    }

    em_ptr->bic = compute_bic(em_ptr->likelihood);
    em_ptr->cs  = em_ptr->smooth ? compute_cs(em_ptr->likelihood) : 0.0;

    return BP_TRUE;
}
예제 #13
0
파일: mp_em_ml.c 프로젝트: edechter/PRISM
int mpm_run_em(EM_ENG_PTR emptr) {
	int     r, iterate, old_valid, converged, saved=0;
	double  likelihood, log_prior;
	double  lambda, old_lambda=0.0;

	config_em(emptr);

	for (r = 0; r < num_restart; r++) {
		SHOW_PROGRESS_HEAD("#em-iters", r);

		initialize_params();
		mpm_bcast_inside();
		clear_sw_msg_send();

		itemp = daem ? itemp_init : 1.0;
		iterate = 0;

		while (1) {
			if (daem) {
				SHOW_PROGRESS_TEMP(itemp);
			}
			old_valid = 0;

			while (1) {
				if (CTRLC_PRESSED) {
					SHOW_PROGRESS_INTR();
					RET_ERR(err_ctrl_c_pressed);
				}

				if (failure_observed) {
					inside_failure = mp_sum_value(0.0);
				}

				log_prior  = emptr->smooth ? emptr->compute_log_prior() : 0.0;
				lambda = mp_sum_value(log_prior);
				likelihood = lambda - log_prior;

				mp_debug("local lambda = %.9f, lambda = %.9f", log_prior, lambda);

				if (verb_em) {
					if (emptr->smooth) {
						prism_printf("Iteration #%d:\tlog_likelihood=%.9f\tlog_prior=%.9f\tlog_post=%.9f\n", iterate, likelihood, log_prior, lambda);
					} else {
						prism_printf("Iteration #%d:\tlog_likelihood=%.9f\n", iterate, likelihood);
					}
				}

				if (!isfinite(lambda)) {
					emit_internal_error("invalid log likelihood or log post: %s (at iterateion #%d)",
					                    isnan(lambda) ? "NaN" : "infinity", iterate);
					RET_ERR(ierr_invalid_likelihood);
				}
				if (old_valid && old_lambda - lambda > prism_epsilon) {
					emit_error("log likelihood or log post decreased [old: %.9f, new: %.9f] (at iteration #%d)",
					           old_lambda, lambda, iterate);
					RET_ERR(err_invalid_likelihood);
				}
				if (itemp == 1.0 && likelihood > 0.0) {
					emit_error("log likelihood greater than zero [value: %.9f] (at iteration #%d)",
					           likelihood, iterate);
					RET_ERR(err_invalid_likelihood);
				}

				converged = (old_valid && lambda - old_lambda <= prism_epsilon);
				if (converged || REACHED_MAX_ITERATE(iterate)) {
					break;
				}

				old_lambda = lambda;
				old_valid  = 1;

				mpm_share_expectation();

				SHOW_PROGRESS(iterate);
				RET_ON_ERR(emptr->update_params());
				iterate++;
			}

			if (itemp == 1.0) {
				break;
			}
			itemp *= itemp_rate;
			if (itemp >= 1.0) {
				itemp = 1.0;
			}
		}

		SHOW_PROGRESS_TAIL(converged, iterate, lambda);

		if (r == 0 || lambda > emptr->lambda) {
			emptr->lambda     = lambda;
			emptr->likelihood = likelihood;
			emptr->iterate    = iterate;

			saved = (r < num_restart - 1);
			if (saved) {
				save_params();
			}
		}
	}

	if (saved) {
		restore_params();
	}

	emptr->bic = compute_bic(emptr->likelihood);
	emptr->cs  = emptr->smooth ? compute_cs(emptr->likelihood) : 0.0;

	return BP_TRUE;
}
예제 #14
0
파일: mp_em_ml.c 프로젝트: edechter/PRISM
int mps_run_em(EM_ENG_PTR emptr) {
	int     r, iterate, old_valid, converged, saved=0;
	double  likelihood;
	double  lambda, old_lambda=0.0;

	config_em(emptr);

	for (r = 0; r < num_restart; r++) {
		mps_bcast_inside();
		clear_sw_msg_send();
		itemp = daem ? itemp_init : 1.0;
		iterate = 0;

		while (1) {
			old_valid = 0;

			while (1) {
				RET_ON_ERR(emptr->compute_inside());
				RET_ON_ERR(emptr->examine_inside());

				if (failure_observed) {
					inside_failure = mp_sum_value(inside_failure);
				}

				likelihood = emptr->compute_likelihood();
				lambda = mp_sum_value(likelihood);

				mp_debug("local lambda = %.9f, lambda = %.9f", likelihood, lambda);

				converged = (old_valid && lambda - old_lambda <= prism_epsilon);
				if (converged || REACHED_MAX_ITERATE(iterate)) {
					break;
				}

				old_lambda = lambda;
				old_valid  = 1;

				RET_ON_ERR(emptr->compute_expectation());
				mps_share_expectation();

				RET_ON_ERR(emptr->update_params());
				iterate++;
			}

			if (itemp == 1.0) {
				break;
			}
			itemp *= itemp_rate;
			if (itemp >= 1.0) {
				itemp = 1.0;
			}
		}

		if (r == 0 || lambda > emptr->lambda) {
			emptr->lambda = lambda;
			saved = (r < num_restart - 1);
			if (saved) {
				save_params();
			}
		}
	}

	if (saved) {
		restore_params();
	}

	return BP_TRUE;
}