Exemple #1
0
def print_log_probs_by_digit_class(model):
    """Print the average log-probability of images in each digit class."""

    X = util.read_mnist_images(TRAIN_IMAGES_FILE)
    y = util.read_mnist_labels(TRAIN_LABELS_FILE)
    X_test = util.read_mnist_images(TEST_IMAGES_FILE)
    y_test = util.read_mnist_labels(TEST_LABELS_FILE)

    print('Training set')
    for digit in range(10):
        X_curr = X[y == digit, :]
        loglik = model.log_likelihood(X_curr) / X_curr.shape[0]
        print('Average log-probability of a {} image: {:1.3f}'.format(
            digit, loglik))
    print()

    print('Test set')
    for digit in range(10):
        X_curr = X_test[y_test == digit, :]
        loglik = model.log_likelihood(X_curr) / X_curr.shape[0]
        print('Average log-probability of a {} image: {:1.3f}'.format(
            digit, loglik))
    print()

    # Call some extra useful things to answer Conceptual Q3
    for_q3(model, X, y)
Exemple #2
0
def train_from_labels(prior=None, show=True):
    """Fit the mixture model using the labeled MNIST data. There are 10 mixture components,
    one corresponding to each of the digit classes."""

    X = util.read_mnist_images(TRAIN_IMAGES_FILE)
    y = util.read_mnist_labels(TRAIN_LABELS_FILE)
    X_test = util.read_mnist_images(TEST_IMAGES_FILE)
    num_data, num_pixels = X.shape

    if prior is None:
        prior = Prior.default_prior()
    model = Model.random_initialization(prior, 10, IMAGE_DIM**2)

    R = np.zeros((num_data, 10))
    R[np.arange(num_data), y] = 1.
    model.params.pi = model.update_pi(R)
    model.params.theta = model.update_theta(X, R)

    # mask which includes top half of pixels
    M = np.zeros(X.shape, dtype=int)
    M[:, :M.shape[1] // 2] = 1

    if show:
        model.visualize_components()
        try:
            model.visualize_predictions(X[:64, :], M[:64, :])
        except:
            print('Posterior predictive distribution not implemented yet.')

        print('Training log-likelihood:', model.log_likelihood(X) / num_data)
        print('Test log-likelihood:',
              model.log_likelihood(X_test) / X_test.shape[0])

    return model
def print_log_probs_by_digit_class(model):
    X = util.read_mnist_images(TRAIN_IMAGES_FILE)
    y = util.read_mnist_labels(TRAIN_LABELS_FILE)
    X_test = util.read_mnist_images(TEST_IMAGES_FILE)
    y_test = util.read_mnist_labels(TEST_LABELS_FILE)

    print('Training set')
    for digit in range(10):
        X_curr = X[y == digit, :]
        loglik = model.log_likelihood(X_curr) / X_curr.shape[0]
        print('Average log-probability of a {} image: {:1.3f}'.format(
            digit, loglik))
    print()

    print('Test set')
    for digit in range(10):
        X_curr = X_test[y_test == digit, :]
        loglik = model.log_likelihood(X_curr) / X_curr.shape[0]
        print('Average log-probability of a {} image: {:1.3f}'.format(
            digit, loglik))
    print()
Exemple #4
0
def print_part_1_values():
    """Print a set of values that we use to check the correctness of the implementation in Part 1."""

    NUM_IMAGES = 50

    X = util.read_mnist_images(TRAIN_IMAGES_FILE)
    y = util.read_mnist_labels(TRAIN_LABELS_FILE)
    X, y = X[:NUM_IMAGES, :], y[:NUM_IMAGES]
    num_data, num_pixels = X.shape

    prior = Prior(2., 3., 4.)
    model = Model.random_initialization(prior, 10, IMAGE_DIM**2)

    R = np.zeros((num_data, 10))
    R[np.arange(num_data), y] = 0.9
    R += 0.01
    model.params.pi = model.update_pi(R)
    model.params.theta = model.update_theta(X, R)

    print('pi[0]', model.params.pi[0])
    print('pi[1]', model.params.pi[1])
    print('theta[0, 239]', model.params.theta[0, 239])
    print('theta[3, 298]', model.params.theta[3, 298])