def create_model(result): meta = result.meta alpha = meta['alpha'] n_inference_iter = meta['n_inference_iter'] max_iter = meta['max_iter'] C = meta['C'] inner_tol = meta['inner_tol'] inactive_window = meta['inactive_window'] inactive_threshold = meta['inactive_threshold'] latent_iter = meta['latent_iter'] outer_tol = meta['outer_tol'] min_changes = meta['min_changes'] try: inference_cache = meta['inference_cache'] except: inference_cache = 0 crf = None if meta['dataset_name'] == 'syntetic': crf = HCRF(n_states=10, n_features=10, n_edge_features=2, alpha=alpha, inference_method='gco', n_iter=n_inference_iter) elif meta['dataset_name'] == 'msrc': crf = HCRF(n_states=24, n_features=2028, n_edge_features=4, alpha=alpha, inference_method='gco', n_iter=n_inference_iter) base_clf = OneSlackSSVM(crf, max_iter=max_iter, C=C, verbose=0, tol=inner_tol, n_jobs=4, inference_cache=inference_cache, inactive_window=inactive_window, inactive_threshold=inactive_threshold) clf = LatentSSVM(base_clf, latent_iter=latent_iter, verbose=2, tol=outer_tol, min_changes=min_changes, n_jobs=4) return clf
def syntetic_weak(n_full=10, n_train=200, C=0.1, dataset=1, latent_iter=15, max_iter=500, inner_tol=0.001, outer_tol=0.01, min_changes=0, initialize=True, alpha=0.1, n_inference_iter=5, inactive_window=50, inactive_threshold=1e-5, warm_start=False, inference_cache=0, save_inner_w=False, inference_method='gco'): # save parameters as meta meta_data = locals() logger = logging.getLogger(__name__) crf = HCRF(n_states=10, n_features=10, n_edge_features=2, alpha=alpha, inference_method=inference_method, n_iter=n_inference_iter) base_clf = OneSlackSSVM(crf, verbose=2, n_jobs=4, max_iter=max_iter, tol=inner_tol, C=C, inference_cache=inference_cache, inactive_window=inactive_window, inactive_threshold=inactive_threshold) clf = LatentSSVM(base_clf, latent_iter=latent_iter, verbose=2, tol=outer_tol, min_changes=min_changes, n_jobs=4) x_train, y_train, y_train_full, x_test, y_test = \ load_syntetic(dataset, n_full, n_train) start = time() clf.fit(x_train, y_train, initialize=initialize, warm_start=warm_start, save_inner_w=save_inner_w) stop = time() train_score = clf.score(x_train, y_train_full) test_score = clf.score(x_test, y_test) time_elapsed = stop - start logger.info('============================================================') logger.info('Score on train set: %f', train_score) logger.info('Score on test set: %f', test_score) logger.info('Norm of weight vector: |w|=%f', np.linalg.norm(clf.w)) logger.info('Elapsed time: %f s', time_elapsed) test_scores = [] for score in clf.staged_score(x_test, y_test): test_scores.append(score) train_scores = [] for score in clf.staged_score(x_train, y_train_full): train_scores.append(score) raw_scores = [] for score in clf.staged_score2(x_train, y_train): raw_scores.append(score) exp_data = clf._get_data() exp_data['test_scores'] = np.array(test_scores) exp_data['train_scores'] = np.array(train_scores) exp_data['raw_scores'] = np.array(raw_scores) meta_data['dataset_name'] = 'syntetic' meta_data['annotation_type'] = 'image-level labelling' meta_data['label_type'] = 'full+weak' meta_data['train_score'] = train_score meta_data['test_score'] = test_score meta_data['time_elapsed'] = time_elapsed meta_data['iter_done'] = clf.iter_done return ExperimentResult(exp_data, meta_data)