From f4bb33e24d24e2b7a31b1b60540e3bfa01612bf1 Mon Sep 17 00:00:00 2001 From: NicolasJaune <76954274+NicolasJaune@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:52:56 +0100 Subject: [PATCH] debug + final push --- __pycache__/mlp.cpython-312.pyc | Bin 0 -> 11160 bytes __pycache__/read_cifar.cpython-312.pyc | Bin 0 -> 3837 bytes final_run.py | 9 ++-- knn.py | 17 +++--- mlp.py | 70 ++++++++++++++----------- read_cifar.py | 2 +- results/knn.png | Bin 0 -> 23646 bytes results/mlp.png | Bin 0 -> 17271 bytes 8 files changed, 56 insertions(+), 42 deletions(-) create mode 100644 __pycache__/mlp.cpython-312.pyc create mode 100644 __pycache__/read_cifar.cpython-312.pyc create mode 100644 results/knn.png create mode 100644 results/mlp.png diff --git a/__pycache__/mlp.cpython-312.pyc b/__pycache__/mlp.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..253dd5416f52e6415215e428a36543d7d410145a GIT binary patch literal 11160 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 GPBH)p2O9DK literal 0 HcmV?d00001 diff --git a/__pycache__/read_cifar.cpython-312.pyc b/__pycache__/read_cifar.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09de6b65aa70c4242958f45a2b8fc2d3961e731d GIT binary patch literal 3837 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 H1$GqxFCZH& literal 0 HcmV?d00001 diff --git a/final_run.py b/final_run.py index b313746..d102905 100644 --- a/final_run.py +++ b/final_run.py @@ -1,11 +1,14 @@ -from read_cifar import read_cifar, split_dataset +from read_cifar import read_cifar_batch, split_dataset from mlp import run_mlp_training import matplotlib.pyplot as plt if __name__ == "__main__": - data, labels = read_cifar() + data, labels = read_cifar_batch("data_batch_1") #On test le mlp avec 1 seul batch (sinon trop long) data_train, labels_train, data_test, labels_test = split_dataset(data, labels, split=0.9) list_accuracies, final_accuracy = run_mlp_training(data_train, labels_train, data_test, labels_test, d_h=64, learning_rate=0.1, num_epoch=100) plt.plot(list_accuracies) + plt.xlabel('Number of epoch') + plt.ylabel('Accuracy') + plt.grid(True) + plt.savefig('results/mlp.png') plt.show() - #plt.savefig("mlp.png") diff --git a/knn.py b/knn.py index 6e23aa8..6d26f13 100644 --- a/knn.py +++ b/knn.py @@ -1,5 +1,5 @@ import numpy as np -from read_cifar import read_cifar, split_dataset +from read_cifar import split_dataset, read_cifar_batch import matplotlib.pyplot as plt def distance_matrix(matrix_a: np.ndarray, matrix_b: np.ndarray): @@ -15,7 +15,7 @@ def knn_predict(dists: np.ndarray, labels_train: np.ndarray, k:int): labels_predicts = np.zeros(np.size(dists, 0)) for i in range(np.size(labels_predicts, 0)): #On extrait les indices des k valeurs plus petites (des k plus proches voisins) - k_neighbors_index = np.argmin(dists[i, :], np.sort(dists[i, :])[:k]) + k_neighbors_index = np.argpartition(dists[i,:], k)[:k] #On compte la classe la plus présente parmi les k voisins les plus proches labels_k_neighbors = labels_train[k_neighbors_index] #On compte le nombre d'occurence des classes parmis les k @@ -36,10 +36,14 @@ def evaluate_knn(data_train:np.ndarray, labels_train: np.ndarray, data_test:np.n return accuracy def plot_knn(data_train:np.ndarray, labels_train: np.ndarray, data_test:np.ndarray, labels_test:np.ndarray, n: int): - accuracy_vector = np.zeros(n) + accuracy_vector = np.zeros(n+1) for k in range(1, n+1): - accuracy_vector[k] = evaluate_knn(data_train, labels_train, data_test, labels_test) + accuracy_vector[k] = evaluate_knn(data_train, labels_train, data_test, labels_test, k) plt.plot(accuracy_vector) + plt.xlabel('Number of Neighbors') + plt.ylabel('Accuracy') + plt.grid(True) + plt.savefig('results/knn.png') plt.show() return @@ -48,7 +52,8 @@ def plot_knn(data_train:np.ndarray, labels_train: np.ndarray, data_test:np.ndarr if __name__ == "__main__": - data, labels = read_cifar() + data, labels = read_cifar_batch("data_batch_1") #On test le KNN avec 1 seul batch (sinon trop long) data_train, labels_train, data_test, labels_test = split_dataset(data, labels, split=0.8) k = 5 #Nombre de voisins - accuracy = evaluate_knn(data_train, labels_train, data_test, labels_test, k) \ No newline at end of file + accuracy = evaluate_knn(data_train, labels_train, data_test, labels_test, k) + plot_knn(data_train, labels_train, data_test, labels_test, 20) \ No newline at end of file diff --git a/mlp.py b/mlp.py index f37afc7..ae5a8aa 100644 --- a/mlp.py +++ b/mlp.py @@ -45,15 +45,21 @@ def learn_once_mse(w1: np.ndarray, b1: np.ndarray, w2: np.ndarray, b2: np.ndarra def one_hot(label=np.ndarray): """ - Encode une suite d'entier en binaire : encodeur one-hot. + Encode les labels en mettant un 1 à l'indice correspondant à la classe du label, et des 0 sinon. :label: La suite d'entier à encoder. :return: la matrice encodée. """ - result = np.zeros((np.size(label, 0), np.size(label, 0))) - for i in range(np.size(label, 0)): - result[i] = convert_integer_to_binary(label[i], np.size(label, 0)) - return result + num_classes = np.max(label) + 1 + one_hot_matrix = np.eye(num_classes)[label] + return one_hot_matrix + +def decode_class(encoded_labels:np.ndarray): + """ + Decode un vecteur encodé avec one_hot et renvoie un vecteur qui contient les classes correspondantes + """ + return np.argmax(encoded_labels, axis=1) + def convert_integer_to_binary(integer, size): """ @@ -74,6 +80,11 @@ def convert_integer_to_binary(integer, size): return np.array(binary) +def softmax(x): + return(np.exp(x - np.max(x)) / np.exp(x - np.max(x)).sum()) + +def sigmoid(z): + return 1 / (1 + np.exp(-np.clip(z, -30, 30))) #pour éviter l'overflow def learn_once_cross_entropy(w1: np.ndarray, b1: np.ndarray, w2: np.ndarray, b2: np.ndarray, data: np.ndarray, labels_train: np.ndarray, learning_rate: np.ndarray): """ @@ -90,18 +101,18 @@ def learn_once_cross_entropy(w1: np.ndarray, b1: np.ndarray, w2: np.ndarray, b2: # Forward pass a0 = data # the data are the input of the first layer z1 = np.matmul(a0, w1) + b1 # input of the hidden layer - a1 = 1 / (1 + np.exp(-z1)) # output of the hidden layer (sigmoid activation function) + a1 = sigmoid(z1) # output of the hidden layer (sigmoid activation function) z2 = np.matmul(a1, w2) + b2 # input of the output layer - a2 = 1 / (1 + np.exp(-z2)) # output of the output layer (sigmoid activation function) + a2 = softmax(z2) # output of the output layer (sigmoid activation function) - encoded_vector = one_hot(labels_train) - dz2 = a2 - encoded_vector - dw2 = dz2*a1 - db2 = dz2 - da1 = dz2*np.sum(w2, axis=1) + encoded_labels_train = one_hot(labels_train) + dz2 = a2 - encoded_labels_train + dw2 = np.matmul(a1.T, dz2) + db2 = np.sum(dz2, axis=0, keepdims=True) + da1 = np.matmul(dz2, w2.T) dz1 = da1*a1*(1-a1) - dw1 = dz1*a0 - db1 = dz1 + dw1 = np.matmul(data.T, dz1) + db1 = np.sum(dz1, axis=0, keepdims=True) w1 -= learning_rate*dw1 w2 -= learning_rate*dw2 @@ -109,7 +120,8 @@ def learn_once_cross_entropy(w1: np.ndarray, b1: np.ndarray, w2: np.ndarray, b2: b2 -= learning_rate*db2 m = np.size(data, 0) - loss = (-1/m) * np.sum(labels_train * np.log(a2) + (1 - labels_train) * np.log(1 - a2)) + eps = 10**(-9) + loss = (-1/m) * np.sum(encoded_labels_train * np.log(a2 + eps) + (1 - encoded_labels_train) * np.log(1 - a2 + eps)) return w1, b1, w2, b2, loss @@ -134,18 +146,15 @@ def train_mlp(w1: np.ndarray, b1: np.ndarray, w2: np.ndarray, b2: np.ndarray, da # Forward pass a0 = data_train z1 = np.matmul(a0, w1) + b1 - a1 = 1 / (1 + np.exp(-z1)) + a1 = sigmoid(z1) z2 = np.matmul(a1, w2) + b2 - a2 = 1 / (1 + np.exp(-z2)) - accuracies = compute_accuracy(a2, labels_train) + a2 = softmax(z2) + predictions = decode_class(a2) + accuracies.append(compute_accuracy(predictions, labels_train)) return w1, b1, w2, b2, accuracies def compute_accuracy(y_predict, y_target): - true = 0 - for i in range(np.size(y_predict, 0)): - if y_predict[i] == y_target[0]: - true += 1 - return true/np.size(y_predict, 0) + return np.mean(y_target == y_predict) def test_mlp(w1: np.ndarray, b1: np.ndarray, w2:np.ndarray, b2:np.ndarray, data_test: np.ndarray, labels_test: np.ndarray): """ @@ -157,16 +166,13 @@ def test_mlp(w1: np.ndarray, b1: np.ndarray, w2:np.ndarray, b2:np.ndarray, data_ :labels_train: output testing vector. :return: the accuracy of the test. """ - - - w1, b1, w2, b2, _ = train_mlp(w1, b1, w2, b2, data_test, labels_test) - a0 = data_test z1 = np.matmul(a0, w1) + b1 - a1 = 1 / (1 + np.exp(-z1)) + a1 = sigmoid(z1) z2 = np.matmul(a1, w2) + b2 - y_predict = 1 / (1 + np.exp(-z2)) - test_accuracy = compute_accuracy(y_predict, labels_test) + a2 = softmax(z2) + predictions = decode_class(a2) + test_accuracy = compute_accuracy(predictions, labels_test) return test_accuracy @@ -183,7 +189,7 @@ def run_mlp_training(data_train:np.ndarray, labels_train:np.ndarray, data_test:n """ #Number of neurons on the first and the last layer. d_in = np.size(data_train, 1) - d_out = np.size(data_test, 0) + d_out = np.max(labels_train)+1 # Random initialization of the network weights and biaises w1 = 2 * np.random.rand(d_in, d_h) - 1 # first layer weights @@ -192,7 +198,7 @@ def run_mlp_training(data_train:np.ndarray, labels_train:np.ndarray, data_test:n b2 = np.zeros((1, d_out)) # second layer biaises w1, b1, w2, b2, list_accuracies = train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epoch) - w1, b1, w2, b2, final_accuracy = test_mlp(w1, b1, w2, b2, data_test, labels_test) + final_accuracy = test_mlp(w1, b1, w2, b2, data_test, labels_test) return list_accuracies, final_accuracy diff --git a/read_cifar.py b/read_cifar.py index ed1c8ec..5748800 100644 --- a/read_cifar.py +++ b/read_cifar.py @@ -18,7 +18,7 @@ def read_cifar(): #We are computing for the 5 first batchs data = [] labels = [] - for i in range(3): + for i in range(5): path_batch = directory + '/data_batch_' + str(i+1) with open(path_batch, 'rb') as fo: dict = pickle.load(fo, encoding='bytes') diff --git a/results/knn.png b/results/knn.png new file mode 100644 index 0000000000000000000000000000000000000000..7513f117f85bdf831afd9ae1fc79fc6aaba12ff7 GIT binary patch literal 23646 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 L)z4*}Q$iB}6AVgK literal 0 HcmV?d00001 diff --git a/results/mlp.png b/results/mlp.png new file mode 100644 index 0000000000000000000000000000000000000000..44bc25a4f118e99c60854a41e5100943f8771b5b GIT binary patch literal 17271 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 literal 0 HcmV?d00001 -- GitLab