From 162fad1beff2c71cbd0cd66e9cb147227834c1a3 Mon Sep 17 00:00:00 2001 From: Loris <loris.duperret@etu.ec-lyon.fr> Date: Fri, 27 Oct 2023 17:44:56 +0200 Subject: [PATCH] Ajout de fichiers --- __pycache__/knn.cpython-39.pyc | Bin 0 -> 1168 bytes __pycache__/mlp.cpython-39.pyc | Bin 0 -> 4317 bytes __pycache__/read_cifar.cpython-39.pyc | Bin 0 -> 1620 bytes knn.py | 23 +--- main.py | 44 +++++++ mlp.py | 181 ++++++++++++++++++++++++++ read_cifar.py | 40 ++---- results/knn.png | Bin 0 -> 31893 bytes results/mlp.png | Bin 0 -> 31623 bytes 9 files changed, 237 insertions(+), 51 deletions(-) create mode 100644 __pycache__/knn.cpython-39.pyc create mode 100644 __pycache__/mlp.cpython-39.pyc create mode 100644 __pycache__/read_cifar.cpython-39.pyc create mode 100644 mlp.py create mode 100644 results/knn.png create mode 100644 results/mlp.png diff --git a/__pycache__/knn.cpython-39.pyc b/__pycache__/knn.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb7b11d1039c12379dba250936aed3b888321cab GIT binary patch literal 1168 zcmYe~<>g{vU|{%n(mJ)Coq^#oh=Yuo7#J8F7#J9eZ5S9BQW#Pga~Pr+Qy5a1a+q?N zqnH^XVl26=QEZG1Da<J>EeuiYDXb}MEeuf{DeNg6EeuhdDU87knw&2|=K5(e-r`G4 zPA)A<Os<SCPR=h%O$ONkk^^Bj1_lOJ1_lOakexvc3=Aa<S&TIdDU8AlDNG>qdzovQ zz+#LjV$3BB3z%vcY8bPa7c$kdlrSt{sbNZCtYHyhkYK1`&SDm4Sjbq*TEiO5pvmg@ z5@h8|Mg|6k5KX3AEQuAF#kV-JQ&S64GINVHS#L4r72IMjF3r8goRVL1i!tODOL1XQ zi6&bVdv0P$QD%i9jA0bTmX}|YTWkoWjiR_y@=M|iit<xRlS^)~reqeE6t83`;$>i9 z_@(A-6%$&VT2vg9lV6ls9OIIoT$-DjS5h3~<Z2l2=@^rpm#0@yd5a&UD={xQH6CIc zC`^jM(ZnReD8kIgEWuR7&%nTt%nS-KC<e)c6oLaTje&uoh9Qd~g;A2Bmbrv6i>Zbg z6f`MJy`aEhsbOwrbYY0Kt7WZWs9}|4sAVf*T)<kxwvaJ}p@ylINs^(Ky@s)dU6P@e zql9q*NS3{ZV<F>0##+uA&Ki~)RvU&wr5cuC22EzaB2YMLGTvfMDXA<-)#SLvTAYzs zkXppfz`$^ewJNnJzqm*M%q~jIOHaMUo>-J#oL^LOi!HGzJvXu97DrNMUUGhEUWq1G z5f4ZqPflV|YEE%{Nl{{E-Yv%LTLO8dx$z~b#U=5@iMa(isl~Sh3W`!wGLuVEQ{o|t zZ!u=x;)DfUag<<od|ql|5lBmBUP@+iYH^eRLI|QIiXY7oa5O;(K9D=Ov-9%ep=yLd z2~r3Y*i2l^0!%zi9Lz$@94rFNTueo>pvVBFT97mdgS^fHOT`M{R9wPX!&Jl2%v8fz z!_v%L%US}864qv>TDBUtU<OS_KTT$^IpCNr0;Nw)_FG&ji6x1UU?>s?xrh@YkXl@F ziyPtzaIh3fFfcF_Nr6;wz%m!aAE1O+1ojM1YFT1VX<|uge0E-*KFBwq<ifxt1oD9r z0|SF5*Dcn((%gbdaLh&V7iZ_BCKl!C<))StWhNJc-E>PZH?gE3C%+^oGfA(Y62!X2 v2Bnz`a!Mes2Zcuw$VenNARNMBlbfGXnv-e=N;lwi&B4gS$ivLR%OL{*?DiwK literal 0 HcmV?d00001 diff --git a/__pycache__/mlp.cpython-39.pyc b/__pycache__/mlp.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..846ddab2e99713be53ae094d802f8f310c3e86b9 GIT binary patch literal 4317 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 literal 0 HcmV?d00001 diff --git a/__pycache__/read_cifar.cpython-39.pyc b/__pycache__/read_cifar.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3738cdce594ff5472b3bbb3863d23cb76f337b83 GIT binary patch literal 1620 zcmYe~<>g{vU|?uEX`SlI!NBks#6iX^3=9ko3=9m#H4F?4DGVu$ISf&ZV45k42~0Cb zF{d!4Ft;#7v81r1u(mKnv8J%4u(vQov8A%7aAY$TRito6aip@Qax^o>Fhy}jaiwyn zaHVo)@ia3rGNf{+aHn!X*eN_wys2!doT*%?yv@upEKz(>{80i?f+>u_44S+zLGJQP zW&}}C%*w#Pz`?-4;0$tM0Rsa=2}2D-3S%=<zg#V231b#h4I{{Hy-c-C;S4DZEDS6R z&CHApc>;zE#d-z|j9?haz{pU;l)@s(P|IAyl)@^>P|H%noW)YZT*92in!?u0R10FU z)PO|Uz<ib(<{FkXreFq5cE4LpMM<|<lPXJ6i!~W<air!Y=ci=mr5A%jE+w%fv6zj4 zfgvX`DK!Tq&ze$FS&*v9ev2i)AT{q6TR~=Wc24RomYn>=lv_-B1-Doei;5B}Z?UK4 z<R_LG8{J~f%quZ7(PX{Fm6TYLoDpA;SdwvzB`q^2H3}*Mvg8&Em}G<4vy!1mkb!~W zm#(u_OlWaxQE^O8eo<y|j7xrUX>Mv>NpXymt6{vSV@y$MVoH2+W?EvAUP0w80R%T5 zY#Atci}^rd&B(*3!^FYJ!7RWiz*Hp6z`%eK59|yK3?Rkect~JiU`S`EWlU$NWlCXm zVTd)VWiDaJVqCyf!%)M#kO>sJH7uaCP|I4&R>Qb}rG|AOBPb3Qu+*@DScN<#tXXXE zxMMA0UBFhuw2-lut%kLR4IJ()ewu7iJRna)oEmS4!ZSkQ8Kdw_P<W<MTqUW+B@k1J zK#5C}@fJ&BMP{)k`z@yY;#(|`5YNib%maJ;7F%LLL26z~5hnu!!!7RQ{JiAElGMD! zl2lFhD87`;qSWM){Gv*5L?PRhS{%g-jvk0rsl~AP1I1+#F9QQZ5kH6!01=?*1IJ;J z5XcrTM9hG~zE}htCoGICOdO1SOgv0nj6BSIj9g4bQlOY&2FXG(Hv<C$C?$eprUaTp zni*@EOBidIYnVhBni*@ssab-dmbHW_i+KS{4Kp~T8EV*47;0ErnIst`8EV;U7*Y5f zH4HUuH7qF%P<c*}JQAO)hP{TPhO>q%jU|{tlhIF;^%iqZYThm8%)Amv$gveA=B4E4 z-r_DuEy^t|Ni50C&(q{aguyM=;)0yak|^%H(%kss#N2|M)Z!>X5T~RlF*6S?Bmfoy zMIlTPe{n`>T3SwOd}dxsW^!urEiQ060c*R(1CE2@cnFUZB9mHNa*G=#ky=~=33_lO zfWw~`?38$r;^Nd2RZwXI5@%rMVCG@uVCDg33r29(Pyt03M|^xP$cgb)8XztD;2frF zXrNnAS(1^T7X#;mb6IM!Zb4-gw@YG4qC#;-VnM1^6|WDtynu4k&z=E+H};xBw^;K^ za|<fLAy@>;bw#3}<N`_*;J7b>*`Jq~n;IXFmaJ~E78GUXmE2+lTT>(t(y9O=6hVX% zh)@O*V2>jRkXLVU*yQG?l;)(`fwD-k1gPL;<Y44r;^5;D;t=CtWMSk1Ll#B=C&!op literal 0 HcmV?d00001 diff --git a/knn.py b/knn.py index ff2624e..a2ce05f 100644 --- a/knn.py +++ b/knn.py @@ -2,6 +2,7 @@ import numpy as np from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt + def distance_matrix(matrix1, matrix2): # Calculate the squared norms of each row in the input matrices norms1 = np.sum(matrix1**2, axis=1, keepdims=True) @@ -52,25 +53,3 @@ def evaluate_knn(data_train, labels_train, data_test, labels_test, k): return accuracy -split_factor = 0.9 -k_values = range(1, 21) -accuracies = [] - -for k in k_values: - accuracy = evaluate_knn(data_train, labels_train, data_test, labels_test, k) - accuracies.append(accuracy) - -# Create the plot -plt.figure(figsize=(8, 6)) -plt.plot(k_values, accuracies, marker='o') -plt.title('KNN Accuracy vs. k') -plt.xlabel('k') -plt.ylabel('Accuracy') -plt.grid(True) - -# Save the plot as "knn.png" in the "results" directory -plt.savefig('results/knn.png') - -# Show the plot (optional) -plt.show() - diff --git a/main.py b/main.py index e69de29..82b526f 100644 --- a/main.py +++ b/main.py @@ -0,0 +1,44 @@ +import read_cifar +import knn +import matplotlib.pyplot as plt +import mlp + +split = 0.9 +d_h=64 +learning_rate=0.1 +num_epochs=2 + + +batch_path = "data/cifar-10-python\cifar-10-batches-py" +data, labels = read_cifar.read_cifar(batch_path) +data_train, labels_train, data_test, labels_test = read_cifar.split_dataset(data, labels, split) + +"""k_values = range(1, 21) +accuracies = [] + +for k in k_values: + accuracy = knn.evaluate_knn(data_train, labels_train, data_test, labels_test, k) + accuracies.append(accuracy) + +plt.figure(figsize=(8, 6)) +plt.plot(k_values, accuracies, marker='o') +plt.title('KNN Accuracy vs. k') +plt.xlabel('k') +plt.ylabel('Accuracy') +plt.grid(True) + +# On enregistre le graphique dans Results +plt.savefig('results/knn.png') + +plt.show()""" + + +train_accuracies,test_accuracy = mlp.run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epochs) +def plot_learning_accuracy(train_accuracies): + plt.figure() + plt.plot(range(1, len(train_accuracies) + 1), train_accuracies) + plt.xlabel("Epoch") + plt.ylabel("Training Accuracy") + plt.title("MLP Training Accuracy") + plt.savefig("results/mlp.png") +plot_learning_accuracy(train_accuracies) \ No newline at end of file diff --git a/mlp.py b/mlp.py new file mode 100644 index 0000000..f451cbd --- /dev/null +++ b/mlp.py @@ -0,0 +1,181 @@ +import numpy as np +import matplotlib.pyplot as plt + +def sigmoid(x): + return 1 / (1 + np.exp(-x)) + +def sigmoid_derivative(x): + return x * (1 - x) + +def learn_once_mse(w1, b1, w2, b2, data, targets, learning_rate): + # Forward pass + a0 = data + z1 = np.matmul(a0, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + predictions = a2 + + # Compute loss (MSE) + loss = np.mean(np.square(predictions - targets)) + + # Backpropagation + delta_a2 = 2 * (predictions - targets) / data.shape[0] + delta_z2 = delta_a2 * sigmoid_derivative(a2) + delta_a1 = np.matmul(delta_z2, w2.T) + delta_z1 = delta_a1 * sigmoid_derivative(a1) + + # Update weights and biases + w2 -= learning_rate * np.matmul(a1.T, delta_z2) + b2 -= learning_rate * np.sum(delta_z2, axis=0, keepdims=True) + w1 -= learning_rate * np.matmul(a0.T, delta_z1) + b1 -= learning_rate * np.sum(delta_z1, axis=0, keepdims=True) + + return w1, b1, w2, b2, loss + +def one_hot(labels, num_classes): + one_hot_matrix = np.zeros((len(labels), num_classes)) + one_hot_matrix[np.arange(len(labels)), labels] = 1 + return one_hot_matrix + + +def learn_once_cross_entropy(w1, b1, w2, b2, data, labels_train, learning_rate): + # Forward pass + a0 = data + z1 = np.matmul(a0, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + predictions = a2 + + # Compute loss (cross-entropy) + m = len(labels_train) + one_hot_labels = one_hot(labels_train, num_classes=w2.shape[1]) + loss = -1/m * np.sum(one_hot_labels * np.log(predictions) + (1 - one_hot_labels) * np.log(1 - predictions)) + + # Backpropagation + delta_z2 = a2 - one_hot_labels + delta_a1 = np.matmul(delta_z2, w2.T) + delta_z1 = delta_a1 * sigmoid_derivative(a1) + + # Update weights and biases + w2 -= learning_rate * np.matmul(a1.T, delta_z2) + b2 -= learning_rate * np.sum(delta_z2, axis=0, keepdims=True) + w1 -= learning_rate * np.matmul(a0.T, delta_z1) + b1 -= learning_rate * np.sum(delta_z1, axis=0, keepdims=True) + + return w1, b1, w2, b2, loss + + +def compute_accuracy(predictions, labels_train): + predicted_labels = np.argmax(predictions, axis=1) + correct = np.sum(predicted_labels == labels_train) + accuracy = correct / len(labels_train) + return accuracy + +def train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epochs): + train_accuracies = [] + + for epoch in range(num_epochs): + for i in range(len(data_train)): + data = data_train[i:i+1] + labels = labels_train[i:i+1] + + # Forward pass + a0 = data + z1 = np.matmul(a0, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + predictions = a2 + + # Compute loss (cross-entropy) + one_hot_labels = one_hot(labels, num_classes=w2.shape[1]) + loss = -np.sum(one_hot_labels * np.log(predictions) + (1 - one_hot_labels) * np.log(1 - predictions)) + + # Backpropagation + delta_z2 = a2 - one_hot_labels + delta_a1 = np.matmul(delta_z2, w2.T) + delta_z1 = delta_a1 * sigmoid_derivative(a1) + + # Update weights and biases + w2 -= learning_rate * np.matmul(a1.T, delta_z2) + b2 -= learning_rate * np.sum(delta_z2, axis=0, keepdims=True) + w1 -= learning_rate * np.matmul(a0.T, delta_z1) + b1 -= learning_rate * np.sum(delta_z1, axis=0, keepdims=True) + + # Calculate training accuracy for this epoch + a0 = data_train + z1 = np.matmul(a0, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + train_accuracy = compute_accuracy(a2, labels_train) + train_accuracies.append(train_accuracy) + + print(f"Epoch {epoch + 1}/{num_epochs}, Loss: {loss:.4f}, Training Accuracy: {train_accuracy:.4f}") + + return w1, b1, w2, b2, train_accuracies + +def test_mlp(w1, b1, w2, b2, data_test, labels_test): + a0 = data_test + z1 = np.matmul(a0, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + + predicted_labels = np.argmax(a2, axis=1) + correct = np.sum(predicted_labels == labels_test) + test_accuracy = correct / len(labels_test) + + return test_accuracy + + +def run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epochs): + d_in = data_train.shape[1] + d_out = len(np.unique(labels_train)) + + w1 = 2 * np.random.rand(d_in, d_h) - 1 + b1 = np.zeros((1, d_h)) + w2 = 2 * np.random.rand(d_h, d_out) - 1 + b2 = np.zeros((1, d_out)) + + train_accuracies = [] + + for epoch in range(num_epochs): + for i in range(len(data_train)): + data = data_train[i:i+1] + labels = labels_train[i:i+1] + + a0 = data + z1 = np.matmul(a0, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + + one_hot_labels = one_hot(labels,num_classes=d_out) + loss = -np.sum(one_hot_labels * np.log(a2) + (1 - one_hot_labels) * np.log(1 - a2)) + + delta_z2 = a2 - one_hot_labels + delta_a1 = np.matmul(delta_z2, w2.T) + delta_z1 = delta_a1 * a1 * (1 - a1) + + w2 -= learning_rate * np.matmul(a1.T, delta_z2) + b2 -= learning_rate * np.sum(delta_z2, axis=0, keepdims=True) + w1 -= learning_rate * np.matmul(a0.T, delta_z1) + b1 -= learning_rate * np.sum(delta_z1, axis=0, keepdims=True) + + a0 = data_train + z1 = np.matmul(a0, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + + train_accuracy = test_mlp(w1, b1, w2, b2, data_train, labels_train) + train_accuracies.append(train_accuracy) + print(f"Epoch {epoch + 1}/{num_epochs}, Loss: {loss:.4f}, Training Accuracy: {train_accuracy:.4f}") + + test_accuracy = test_mlp(w1, b1, w2, b2, data_test, labels_test) + + return train_accuracies, test_accuracy + diff --git a/read_cifar.py b/read_cifar.py index 73fe59a..b1c8b2d 100644 --- a/read_cifar.py +++ b/read_cifar.py @@ -4,14 +4,12 @@ import os def read_cifar_batch(batch_path): with open(batch_path, 'rb') as file: - # Load the batch data batch_data = pickle.load(file, encoding='bytes') - # Extract data and labels from the batch data = batch_data[b'data'] # CIFAR-10 data labels = batch_data[b'labels'] # Class labels - # Convert data and labels to the desired data types + # Convertis data et label dans les types souhaités data = np.array(data, dtype=np.float32) labels = np.array(labels, dtype=np.int64) @@ -22,34 +20,21 @@ def read_cifar(directory_path): data_batches = [] label_batches = [] - # Iterate through the batch files in the directory for batch_file in ['data_batch_1', 'data_batch_2', 'data_batch_3', 'data_batch_4', 'data_batch_5', 'test_batch']: batch_path = os.path.join(directory_path, batch_file) - with open(batch_path, 'rb') as file: - # Load the batch data - batch_data = pickle.load(file, encoding='bytes') - - # Extract data and labels from the batch - data = batch_data[b'data'] # CIFAR-10 data - labels = batch_data[b'labels'] # Class labels + data, labels = read_cifar_batch(batch_path) data_batches.append(data) - label_batches.extend(labels) + label_batches.append(labels) - # Combine all batches into a single data matrix and label vector + # Concatene les données en une seule matrice et un seul vecteur data = np.concatenate(data_batches, axis=0) - labels = np.array(label_batches, dtype=np.int64) - - # Convert data to the desired data type - data = data.astype(np.float32) + labels = np.concatenate(label_batches) return data, labels def split_dataset(data, labels, split): - # Check if the split parameter is within the valid range (0 to 1) - if split < 0 or split > 1: - raise ValueError("Split must be a float between 0 and 1.") # Get the number of samples in the dataset num_samples = len(data) @@ -58,10 +43,10 @@ def split_dataset(data, labels, split): num_train_samples = int(num_samples * split) num_test_samples = num_samples - num_train_samples - # Create a random shuffle order for the indices + # Cree des permutations aléatoires shuffle_indices = np.random.permutation(num_samples) - # Use the shuffled indices to split the data and labels + # Mélange des données data_train = data[shuffle_indices[:num_train_samples]] labels_train = labels[shuffle_indices[:num_train_samples]] data_test = data[shuffle_indices[num_train_samples:]] @@ -71,15 +56,12 @@ def split_dataset(data, labels, split): - - - - - if __name__ == '__main__': - batch_path = "data/cifar-10-python\cifar-10-batches-py\data_batch_1" # Update with your path - data, labels = read_cifar_batch(batch_path) + batch_path = "data/cifar-10-python\cifar-10-batches-py" + data, labels = read_cifar(batch_path) print("Data shape:", data.shape) print("Labels shape:", labels.shape) + split=0.9 + data_train, labels_train, data_test, labels_test = split_dataset(data, labels, split) diff --git a/results/knn.png b/results/knn.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8526b22fe89b583153d7248d6dc77b64a43b94 GIT binary patch literal 31893 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 TR@sGWPzvyL^>bP0l+XkKHnYSY literal 0 HcmV?d00001 diff --git a/results/mlp.png b/results/mlp.png new file mode 100644 index 0000000000000000000000000000000000000000..d350948b28266707c2fcd40988d16e15c21bc93d GIT binary patch literal 31623 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 literal 0 HcmV?d00001 -- GitLab