From 0687ccef9ee8709a7c821c939a23356257eeabeb Mon Sep 17 00:00:00 2001
From: Danjou <pierre.danjou@etu.ec-lyon.fr>
Date: Tue, 12 Nov 2024 09:56:59 +0100
Subject: [PATCH] mlp

---
 mlp.png | Bin 0 -> 30321 bytes
 mlp.py  |  30 +++++-------------------------
 2 files changed, 5 insertions(+), 25 deletions(-)
 create mode 100644 mlp.png

diff --git a/mlp.png b/mlp.png
new file mode 100644
index 0000000000000000000000000000000000000000..83352343a69a7879686c6ac19c0816b071697b1d
GIT binary patch
literal 30321
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%0A``VJuE1Q?^T)Qs)*x}-B$B%R#Z5L3O10IMx
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
Y@sQXJ3yCY6CxFUBPgg&ebxsLQ0CJQY9smFU

literal 0
HcmV?d00001

diff --git a/mlp.py b/mlp.py
index 17fa80c..3078150 100644
--- a/mlp.py
+++ b/mlp.py
@@ -27,30 +27,17 @@ def learn_once_mse(w1, b1, w2, b2, data, targets, learning_rate):
 
     # Compute loss (MSE)
     loss = np.mean(np.square(predictions - targets))
-    print(f'loss: {loss}')
-    print('shape a1', a1.shape)
-    print('shape w1', w1.shape)
-    print('shape b1', b1.shape)
-
-    print('shape a2', a2.shape)
-    print('shape w2', w2.shape)
-    print('shape b2', b2.shape)
+    
    
     # Backpropagation
     delta_a2 = 2 / N_out * (a2 - targets)
-    print('shape delta_a2', delta_a2.shape)
     delta_z2 = delta_a2 * (a2 * (1 - a2)) 
-    print('shape delta_z2', delta_z2.shape)
     delta_w2 = np.dot(a1.T, delta_z2)
-    print('shape delta_w2', delta_w2.shape)
     delta_b2 = delta_z2
 
     delta_a1 = np.dot(delta_z2, w2.T)
-    print('shape delta_a1', delta_a1.shape)
     delta_z1 = delta_a1 * (a1 * (1- a1))
-    print('shape delta_z1', delta_z1.shape)
     delta_w1 = np.dot(a0.T, delta_z1)
-    print('shape delta_w1', delta_w2.shape)
     delta_b1 = delta_z1
 
     # Update weights and biases
@@ -88,12 +75,7 @@ def learn_once_cross_entropy(w1, b1, w2, b2, data, labels_train, learning_rate):
     z2 = np.matmul(a1, w2) + b2  # input of the output layer
     a2 = softmax_stable(z2)  # output of the output layer (sigmoid activation function)
     predictions = a2  # the predicted values are the outputs of the output layer
-    # print('a0', a0[:2])
-    # print('w1', w1[:2])
-    # print('z1', z1[:2])
-    # print('a1', a1[:2])
-    # print('z2', z2[:2])
-    # print('a2', a2[:2])
+  
 
     # Compute loss (cross-entropy loss)
     y_true_one_hot = one_hot(labels_train)
@@ -158,7 +140,7 @@ def run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, lear
     d_in = data_train.shape[1]
     d_out = 10 #we can hard code it here or len(np.unique(label_train))
 
-    #Random initialisation of weights Xavier initialisation
+    #Random initialisation
     w1 = np.random.randn(d_in, d_h) / np.sqrt(d_in)
     b1 = np.zeros((1, d_h))
     w2 = np.random.randn(d_h, d_out) / np.sqrt(d_h)
@@ -172,7 +154,6 @@ def run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, lear
     return train_accuracies, test_accuracy
 
 def plot_graph(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epoch):
-    # Run MLP training
     train_accuracies, test_accuracy = run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epoch)
     
     # Plot and save the learning accuracy graph
@@ -184,7 +165,7 @@ def plot_graph(data_train, labels_train, data_test, labels_test, d_h, learning_r
     plt.title('MLP Train Accuracy')
     plt.legend()
     plt.grid(True)
-    plt.savefig(r'C:\Users\danjo\Documents\GitHub\image-classification\results')
+    plt.savefig(r'C:\Users\danjo\Documents\GitHub\image-classification\mlp')
     plt.show()
     return()
 
@@ -198,7 +179,7 @@ if __name__ == "__main__":
    
    d_in, d_h, d_out = 3072, 64, 10
    learning_rate = 0.1
-   num_epoch = 5
+   num_epoch = 100
    
    
     #Initialisation 
@@ -209,7 +190,6 @@ if __name__ == "__main__":
 
    #train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epoch)
 
-   test_mlp(w1, b1, w2, b2, data_test[:50], labels_test[:50])
     
    plot_graph(data_train, labels_train, data_test, labels_test , d_h, learning_rate, num_epoch)
 
-- 
GitLab