示例#1
0
def main(args):
    train, test = read_data(args.in_dir)
    train, val = split_data(train)

    print('\n\nTrain: ', train.shape)
    print('Val: ', val.shape)
    print('Test:  ', test.shape)

    # RBM object
    rbm = RBM(args.num_hidden, val.shape[1], args.lr, args.n, args.batch_size,
              args.epochs)

    # Train RBM
    train_loss, val_loss = rbm.Train(train, val)

    # Create output dir if it doesn't exist
    if not os.path.exists(args.out_dir):
        os.makedirs(args.out_dir)

    # Plot error
    plot_error(train_loss, val_loss, args.out_dir)

    # Performance on Test set
    error_test = rbm.reconstruction_error(test.T)

    print("\n\n\nReconstruction error...\n")
    print("Train : ", train_loss[-1])
    print("Val : ", val_loss[-1])
    print("Test : ", error_test)

    # For viewing reconstruction
    reconstruct_images(rbm, test, (args.image_height, args.image_width),
                       args.out_dir)

    # Saving the model learned weights
    pickle.dump([rbm.W, rbm.b_h, rbm.b_v],
                open(args.out_dir + '\\weights.pkl', 'wb'))
    print(f"\n\nRBM weights saved in {args.out_dir}\\weights.pkl")