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)
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()
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])