Beispiel #1
0
# create a folder to save the results
dir_save = model_rbm.make_dir_save(parent_dir_save, prefix, learn_rate_a,
                                   learn_rate_b, learn_rate_W, reg_lambda_W,
                                   reg_alpha_W, visible_type_fixed_param,
                                   hidden_type_fixed_param, maxiter,
                                   normalization_method)
# make a copy of this script in dir_save
shutil.copy(workdir + "main_test_ExpRBM_FASHIONMNIST.py", dir_save)
shutil.copy(workdir + "restricted_boltzmann_machine.py", dir_save)

# plot some some training samples
train_set_x_3way = numpy.reshape(train_set_x[:, 0:100], newshape=(28, 28, 100))
cl.plot_image_subplots(dir_save + "fig_" + prefix + "_train_samples.pdf",
                       data=train_set_x_3way[:, :, 0:100],
                       figwidth=6,
                       figheight=6,
                       colormap="gray",
                       num_col=10,
                       wspace=0.01,
                       hspace=0.001)

# train RBM
model_rbm.train(X=train_set_x,
                X_validate=test_set_x,
                batch_size=batch_size,
                pcdk=pcdk,
                NS=NS,
                maxiter=maxiter,
                learn_rate_a=learn_rate_a,
                learn_rate_b=learn_rate_b,
                learn_rate_W=learn_rate_W,
                change_rate=change_rate,
Xg, XMg = model_dbn.generate_x(pcdk=10 * sampling_pcdk,
                               NS=sampling_NS,
                               X0=None,
                               persistent=True,
                               rand_init=True,
                               init=True)
for s in range(sampling_time):
    Xg, XMg = model_dbn.generate_x(pcdk=sampling_pcdk, NS=sampling_NS)
    # plot sampled data
    sample_set_x_3way = numpy.reshape(XMg, newshape=(28, 28, 100))
    print(s)
    cl.plot_image_subplots(dir_save + "/fig_" + prefix +
                           "_pretrain_generated_samples_randinit_" + str(s) +
                           ".pdf",
                           data=sample_set_x_3way,
                           figwidth=6,
                           figheight=6,
                           colormap=None,
                           num_col=10,
                           wspace=0.01,
                           hspace=0.001)

# estimate the lower bound of the log-likelihood
T = 10000
S = 10
model_dbn.estimate_log_likelihood(X=test_set_x,
                                  Hr=None,
                                  HMr=None,
                                  a_hat_gen=None,
                                  b_hat_gen=None,
                                  estimate_logZ=True,
                                  base_rate_type="prior",
                                        NS=num_sampled_points,
                                        X0=None,
                                        init_sampling=True)

for s in range(sampling_time):
    chainX, chainXM = model_mdbn.generate_x(pcdk=pcdk_sampling,
                                            init_sampling=False)
    # plot sampled data
    sample_set_x_3way = numpy.reshape(chainXM[0],
                                      newshape=(28, 28, num_sampled_points))
    filename = dir_save + prefix + "_generated_samples_randinit_" + str(
        rand_init) + "_" + str(s) + "_V0.pdf"
    cl.plot_image_subplots(filename,
                           data=sample_set_x_3way,
                           figwidth=6,
                           figheight=6,
                           colormap=None,
                           num_col=num_col,
                           wspace=0.01,
                           hspace=0.001)
    #filename=dir_save+"mdbn_MNIST_generated_samples_randinit_"+str(rand_init)+"_"+str(s)+"_V1_1D.txt"
    #sample_set_y_1way=numpy.argmax(chainXM[1],axis=0)
    #numpy.savetxt(filename,sample_set_y_1way,fmt="%s",delimiter="\t")
    filename = dir_save + prefix + "_generated_samples_randinit_" + str(
        rand_init) + "_" + str(s) + "_V1_2D.txt"
    sample_set_y_2way = numpy.reshape(
        numpy.argmax(chainXM[1], axis=0),
        newshape=(num_col, int(num_sampled_points / num_col)))
    numpy.savetxt(filename, sample_set_y_2way, fmt="%s", delimiter="\t")
    filename = dir_save + prefix + "_generated_samples_randinit_" + str(
        rand_init) + "_" + str(s) + "_V1_prob.txt"
    numpy.savetxt(filename,
                       clamp_visible=False,
                       persistent=True,
                       rand_init_X=rand_init,
                       rand_init_H=False,
                       init_sampling=True)
for s in range(sampling_time):
    chainX, chainH, chainXM, chainXP, chainHM, chain_length_ = model_dbm.pcd_sampling(
        pcdk=1000, init_sampling=False)
    # plot sampled data
    sample_set_x_3way = numpy.reshape(chainXM, newshape=(28, 28, 100))
    print(s)
    cl.plot_image_subplots(dir_save +
                           "/fig_DBM_MNIST_generated_samples_randinit_" +
                           str(rand_init) + "_" + str(s) + ".pdf",
                           data=sample_set_x_3way,
                           figwidth=6,
                           figheight=6,
                           colormap=None,
                           num_col=10,
                           wspace=0.01,
                           hspace=0.001)

# estimate log-likelihood
loglh_test, logZ_test, Z_std_test, energy_test, entropy_test = model_dbm.estimate_log_likelihood(
    X=test_set_x,
    NMF=100,
    base_type="prior",
    beta=None,
    step_base=0.999,
    T=10000,
    S=10)
loglh_train, logZ_train, Z_std_train, energy_train, entropy_train = model_dbm.estimate_log_likelihood(