def calculate_accuracy(X: np.ndarray, targets: np.ndarray, model: SoftmaxModel) -> float: """ Args: X: images of shape [batch size, 785] targets: labels/targets of each image of shape: [batch size, 10] model: model of class SoftmaxModel Returns: Accuracy (float) """ # TODO: Implement this function (copy from last assignment) accuracy = 0 output = model.forward(X) predictions = one_hot_encode(np.array([np.argmax(output, axis=1)]).T, 10) correct_pred = np.count_nonzero(targets * predictions) total_pred = output.shape[0] accuracy = correct_pred / total_pred return accuracy
import numpy as np import utils from task2a import one_hot_encode, pre_process_images, SoftmaxModel, gradient_approximation_test if __name__ == "__main__": # Simple test on one-hot encoding Y = np.zeros((1, 1), dtype=int) Y[0, 0] = 3 Y = one_hot_encode(Y, 10) assert Y[0, 3] == 1 and Y.sum() == 1, \ f"Expected the vector to be [0,0,0,1,0,0,0,0,0,0], but got {Y}" X_train, Y_train, *_ = utils.load_full_mnist(0.1) mean = np.mean(X_train) std = np.std(X_train) X_train = pre_process_images(X_train, mean, std) Y_train = one_hot_encode(Y_train, 10) assert X_train.shape[1] == 785,\ f"Expected X_train to have 785 elements per image. Shape was: {X_train.shape}" # Modify your network here neurons_per_layer = [64, 64, 10] use_improved_sigmoid = True use_improved_weight_init = True model = SoftmaxModel(neurons_per_layer, use_improved_sigmoid, use_improved_weight_init) # Gradient approximation check for 100 images X_train = X_train[:100] Y_train = Y_train[:100] for layer_idx, w in enumerate(model.ws):
num_epochs = 50 learning_rate = 0.02 batch_size = 32 neurons_per_layer = [64, 10] momentum_gamma = .9 # Task 3 hyperparameter shuffle_data = True use_improved_sigmoid = False use_improved_weight_init = False use_momentum = False # Load dataset X_train, Y_train, X_val, Y_val = utils.load_full_mnist() X_train = pre_process_images(X_train) X_val = pre_process_images(X_val) Y_train = one_hot_encode(Y_train, 10) Y_val = one_hot_encode(Y_val, 10) ######1nd model - network from task 3###### use_improved_sigmoid = True use_improved_weight_init = True use_momentum = True model = SoftmaxModel(neurons_per_layer, use_improved_sigmoid, use_improved_weight_init) trainer = SoftmaxTrainer( momentum_gamma, use_momentum, model, learning_rate, batch_size, shuffle_data,