def main_slp(retrain_tag): mnist_train = sio.loadmat('./mnist_train.mat') mnist_test = sio.loadmat('./mnist_test.mat') im_train, label_train = mnist_train['im_train'], mnist_train['label_train'] im_test, label_test = mnist_test['im_test'], mnist_test['label_test'] batch_size = 32 im_train, im_test = im_train / 255.0, im_test / 255.0 mini_batch_x, mini_batch_y = get_mini_batch(im_train, label_train, batch_size) if retrain_tag: w, b = train_slp(mini_batch_x, mini_batch_y) sio.savemat('slp.mat', mdict={'w': w, 'b': b}) else: data = sio.loadmat('slp.mat') w, b = data['w'], data['b'] acc = 0 confusion = np.zeros((10, 10)) num_test = im_test.shape[1] for i in range(num_test): x = im_test[:, [i]] y = fc(x, w, b) l_pred = np.argmax(y) confusion[l_pred, label_test[0, i]] = confusion[l_pred, label_test[0, i]] + 1 if l_pred == label_test[0, i]: acc = acc + 1 accuracy = acc / num_test for i in range(10): confusion[:, i] = confusion[:, i] / np.sum(confusion[:, i]) label_classes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] visualize_confusion_matrix(confusion, accuracy, label_classes, 'Single-layer Perceptron Confusion Matrix')
def main_slp(): mnist_train = sio.loadmat('./ReducedMNIST/mnist_train.mat') mnist_test = sio.loadmat('./ReducedMNIST/mnist_test.mat') im_train, label_train = mnist_train['im_train'], mnist_train['label_train'] im_test, label_test = mnist_test['im_test'], mnist_test['label_test'] batch_size = 32 im_train, im_test = im_train / 255.0, im_test / 255.0 mini_batch_x, mini_batch_y = get_mini_batch(im_train, label_train, batch_size) w, b = train_slp(mini_batch_x, mini_batch_y) sio.savemat('slp.mat', mdict={'w': w, 'b': b}) acc = 0 confusion = np.zeros((10, 10)) num_test = im_test.shape[1] for i in range(num_test): x = im_test[:, [i]] y = fc(x, w, b) l_pred = np.argmax(y) confusion[l_pred, label_test[0, i]] = confusion[l_pred, label_test[0, i]] + 1 if l_pred == label_test[0, i]: acc = acc + 1 accuracy = acc / num_test for i in range(10): confusion[:, i] = confusion[:, i] / np.sum(confusion[:, i]) return confusion, accuracy