if check_base_rbm_partition_function: baserbm = RestrictedBoltzmannMachine(0, cfg.n_vis, cfg.n_hid, 0) baserbm.weights = gp.zeros(baserbm.weights.shape) baserbm.bias_hid = gp.zeros(baserbm.bias_hid.shape) baserbm.bias_vis = ais.base_bias_vis print "Base RBM log partition function using partition_func: %f" % baserbm.partition_function(20, 50).ln() # perform estimation of partition function print "Estimating partition function using %dx %d AIS runs with %d intermediate "\ "RBMs and %d Gibbs steps..." % (ais_iterations, ais_runs, len(ais_betas), ais_gibbs_steps) with open("ais_iterations.csv", 'w') as outfile: outfile.write("iterations\tlog Z\n") lpfs = [] for i in range(ais_iterations): lpf, lpf_m_3s, lpf_p_3s = ais.log_partition_function(ais_betas, ais_runs, ais_gibbs_steps) lpfs.append(lpf) print "%3d: ln Z = %3.6f; ln(Z-3s) = %3.6f; ln(Z+3s) = %3.6f" \ % (i, lpf, lpf_m_3s, lpf_p_3s) outfile.write("%d\t%f\n" % (i, lpf)) lpf_mean = np.mean(lpfs) lpf_std = np.std(lpfs) print print "mean: ln Z = %f +/- %f" % (lpf_mean, lpf_std) np.savez_compressed("lpf-%02d.npz" % epoch, lpf=lpf_mean, lpf_std=lpf_std)