def get_model(model_path): hyperparams = utils.load_dict_from_json_file(os.path.join(model_path, "hyperparams")) hyperparams['weights_initialization'] = "Zeros" trainingparams = utils.load_dict_from_json_file(os.path.join(model_path, "trainingparams")) dataset_name = trainingparams['dataset_name'] if dataset_name != "binarized_mnist": raise ValueError("Invalid dataset. Only model trained on MNIST supported.") # # LOAD DATASET #### dataset = Dataset.get(dataset_name) if trainingparams['batch_size'] == -1: trainingparams['batch_size'] = dataset['train']['length'] model = build_model(dataset, trainingparams, hyperparams, hyperparams['hidden_sizes']) print("### Loading model | Hidden:{0} CondMask:{1} Activation:{2} ... ".format( hyperparams['hidden_sizes'], hyperparams['use_cond_mask'], hyperparams['hidden_activation']), end=' ') start_time = t.time() load_model_params(model, model_path) print(utils.get_done_text(start_time), "###") return model, dataset_name, dataset
def get_model(model_path): hyperparams = utils.load_dict_from_json_file( os.path.join(model_path, "hyperparams")) hyperparams['weights_initialization'] = "Zeros" trainingparams = utils.load_dict_from_json_file( os.path.join(model_path, "trainingparams")) dataset_name = trainingparams['dataset_name'] if dataset_name != "binarized_mnist": raise (Exception( "Invalid dataset. Only model trained on MNIST supported.")) # # LOAD DATASET #### dataset = Dataset.get(dataset_name) if trainingparams['batch_size'] == -1: trainingparams['batch_size'] = dataset['train']['length'] model = build_model(dataset, trainingparams, hyperparams, hyperparams['hidden_sizes']) print "### Loading model | Hidden:{0} CondMask:{1} Activation:{2} ... ".format( hyperparams['hidden_sizes'], hyperparams['use_cond_mask'], hyperparams['hidden_activation']), start_time = t.time() load_model_params(model, model_path) print utils.get_done_text(start_time), "###" return model, dataset_name, dataset
def load(cls, path): meta = load_dict_from_json_file(pjoin(path, "meta.json")) assert meta['name'] == cls.__name__ hyperparams = load_dict_from_json_file(pjoin(path, "hyperparams.json")) model = cls(**hyperparams) parameters = np.load(pjoin(path, "params.npz")) for param_name, param in model.parameters.items(): param.set_value(parameters[param_name]) return model
# # Set the name of the experiment (remove the --force from the args to make sure it will generate the same uid) if '--force' in sys.argv: sys.argv.remove('--force') experiment_name = args.name if args.name is not None else utils.generate_uid_from_string( ' '.join(sys.argv)) # # Creating the experiments folder or resuming experiment save_path_experiment = os.path.join('./experiments/', experiment_name) if os.path.isdir(save_path_experiment): if not args.force: print "### Resuming experiment ({0}). ###\n".format( experiment_name) loaded_hyperparams = utils.load_dict_from_json_file( os.path.join(save_path_experiment, "hyperparams")) loaded_trainingparams = utils.load_dict_from_json_file( os.path.join(save_path_experiment, "trainingparams")) if loaded_trainingparams != trainingparams or loaded_hyperparams != hyperparams: print "The arguments provided are different than the one saved. Use --force if you are certain.\nQuitting." exit() resume_mode = True else: os.makedirs(save_path_experiment) utils.save_dict_to_json_file( os.path.join(save_path_experiment, "hyperparams"), hyperparams) utils.save_dict_to_json_file( os.path.join(save_path_experiment, "trainingparams"),
hyperparams = vars(args.model) trainingparams = vars(args.train) # # Set the name of the experiment (remove the --force from the args to make sure it will generate the same uid) if '--force' in sys.argv: sys.argv.remove('--force') experiment_name = args.name if args.name is not None else utils.generate_uid_from_string(' '.join(sys.argv)) # # Creating the experiments folder or resuming experiment save_path_experiment = os.path.join('./experiments/', experiment_name) if os.path.isdir(save_path_experiment): if not args.force: print "### Resuming experiment ({0}). ###\n".format(experiment_name) loaded_hyperparams = utils.load_dict_from_json_file(os.path.join(save_path_experiment, "hyperparams")) loaded_trainingparams = utils.load_dict_from_json_file(os.path.join(save_path_experiment, "trainingparams")) if loaded_trainingparams != trainingparams or loaded_hyperparams != hyperparams: print "The arguments provided are different than the one saved. Use --force if you are certain.\nQuitting." exit() resume_mode = True else: os.makedirs(save_path_experiment) utils.save_dict_to_json_file(os.path.join(save_path_experiment, "hyperparams"), hyperparams) utils.save_dict_to_json_file(os.path.join(save_path_experiment, "trainingparams"), trainingparams) # # LOAD DATASET ####
def _compute_AIS(model, M=100, betas=BETAS, batch_size=None, seed=1234, ais_working_dir=".", force=False): ais_results_json = pjoin(ais_working_dir, "ais_results.part.json") if batch_size is None: batch_size = M # Will be executing M AIS's runs. last_sample_chain = np.zeros((M, model.input_size), dtype=config.floatX) M_log_w_ais = np.zeros(M, dtype=np.float64) model.set_rng_seed(seed) ais_results = {} if os.path.isfile(ais_results_json) and not force: print "Resuming AIS using info from {}".format(ais_results_json) ais_results = utils.load_dict_from_json_file(ais_results_json) M_log_w_ais = ais_results['M_log_w_ais'] last_sample_chain = ais_results['last_sample_chain'] lnZ_trivial = ais_results['lnZ_trivial'] # Iterate through all AIS runs. for i in range(0, M, batch_size): if i <= ais_results.get('batch_id', -1): continue model.set_rng_seed(seed+i) actual_size = min(M - i, batch_size) print "AIS run: {}/{} (using batch size of {})".format(i, M, batch_size) ais_partial_results = _compute_AIS_samples(model, M=actual_size, betas=betas) M_log_w_ais[i:i+batch_size] = ais_partial_results['M_log_w_ais'] last_sample_chain[i:i+batch_size] = ais_partial_results['last_sample_chain'] lnZ_trivial = ais_partial_results['lnZ_trivial'] # Save partial results if os.path.isfile(ais_results_json): shutil.copy(ais_results_json, ais_results_json[:-4] + "old.json") ais_results = {'batch_id': i, 'M': M, 'batch_size': batch_size, 'last_sample_chain': last_sample_chain, 'M_log_w_ais': M_log_w_ais, 'lnZ_trivial': lnZ_trivial} utils.save_dict_to_json_file(ais_results_json, ais_results) # We compute the mean of the estimated `r_AIS` Ms = np.arange(1, M+1) log_sum_w_ais = np.logaddexp.accumulate(M_log_w_ais) logcummean_Z = log_sum_w_ais - np.log(Ms) # We compute the standard deviation of the estimated `r_AIS` logstd_AIS = np.zeros_like(M_log_w_ais) for k in Ms[1:]: m = np.max(M_log_w_ais[:k]) logstd_AIS[k-1] = np.log(np.std(np.exp(M_log_w_ais[:k]-m), ddof=1)) - np.log(np.sqrt(k)) logstd_AIS[k-1] += m logstd_AIS[0] = np.nan # Standard deviation of only one sample does not exist. # The authors report AIS error using ln(Ẑ ± 3\sigma) m = max(np.nanmax(logstd_AIS), np.nanmax(logcummean_Z)) logcumstd_Z_up = np.log(np.exp(logcummean_Z-m) + 3*np.exp(logstd_AIS-m)) + m - logcummean_Z logcumstd_Z_down = -(np.log(np.exp(logcummean_Z-m) - 3*np.exp(logstd_AIS-m)) + m) + logcummean_Z # Compute the standard deviation of ln(Z) std_lnZ = np.array([np.std(M_log_w_ais[:k], ddof=1) for k in Ms[1:]]) std_lnZ = np.r_[np.nan, std_lnZ] # Standard deviation of only one sample does not exist. return {"logcummean_Z": logcummean_Z.astype(config.floatX), "logcumstd_Z_down": logcumstd_Z_down.astype(config.floatX), "logcumstd_Z_up": logcumstd_Z_up.astype(config.floatX), "logcumstd_Z": logstd_AIS.astype(config.floatX), "M_log_w_ais": M_log_w_ais, "lnZ_trivial": lnZ_trivial, "std_lnZ": std_lnZ, "last_sample_chain": last_sample_chain, "batch_size": batch_size, "seed": seed, "nb_temperatures": len(betas), "nb_samples": M }