diff --git a/ANN/main.ipynb b/ANN/main.ipynb index 78db26e..8ab6e9d 100644 --- a/ANN/main.ipynb +++ b/ANN/main.ipynb @@ -121,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "83a68db8", "metadata": {}, "outputs": [ @@ -149,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "7285c021", "metadata": {}, "outputs": [], @@ -178,7 +178,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "b5b34c6e", "metadata": {}, "outputs": [], @@ -188,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "5c00cf15", "metadata": {}, "outputs": [ @@ -200,7 +200,7 @@ " [ 0.00512708, -0.12022767, -0.80698188]])" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -211,7 +211,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "4b0f2e37", "metadata": {}, "outputs": [ @@ -223,7 +223,7 @@ " [-0.12214979, 1.01251548, -0.91386915]])" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -257,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "31b8c4dd", "metadata": {}, "outputs": [], @@ -294,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "6d6b0b09", "metadata": {}, "outputs": [ @@ -306,7 +306,7 @@ " [0.48247944]])" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -365,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 11, "id": "ef1098b0", "metadata": {}, "outputs": [], @@ -421,7 +421,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 12, "id": "deacbee4", "metadata": {}, "outputs": [], @@ -441,7 +441,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 13, "id": "bb581e90", "metadata": {}, "outputs": [ @@ -451,7 +451,7 @@ "" ] }, - "execution_count": 34, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -465,7 +465,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 14, "id": "ddb0a6fb", "metadata": {}, "outputs": [ @@ -490,7 +490,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 15, "id": "23314858", "metadata": {}, "outputs": [ @@ -500,7 +500,7 @@ "49999" ] }, - "execution_count": 36, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -521,7 +521,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 16, "id": "c4dd5448", "metadata": {}, "outputs": [], @@ -536,8 +536,8 @@ }, { "cell_type": "code", - "execution_count": 51, - "id": "c4020634", + "execution_count": null, + "id": "a800df69", "metadata": {}, "outputs": [ { @@ -550,9 +550,24 @@ "Epoch 4/5 - Average Loss: 0.0403\n", "Epoch 5/5 - Average Loss: 0.0361\n" ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAHVCAYAAAATqShMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlcelbwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAc8lJREFUeJzt3QeUU8XbBvBnd+lF6b33jiBNkWYX7Cj2itjoAioiKKIgilJEsXyWv71gxYaAdARp0pv0Ih0UpLP7nWeudzfJFpJsdjNJnt85OZvctJvcdydvJjPvxCUlJSVBRERERCRKxYd7B0REREREspISXhERERGJakp4RURERCSqKeEVERERkaimhFdEREREopoSXhERERGJakp4RURERCSqKeEVERERkaimhFdErPPQQw/huuuuC9v9RUQkuuQI9w6ISORo1aoV9uzZc8bb3X777XjyySeDfp6tW7di27ZtYbt/Zj366KP47rvvsHTpUuTKlQu2mzp1Kj777DOzv0eOHEGZMmVQq1Yt3HXXXWjYsGG4d09EJNPitLSwiPjrzz//xKlTp5Ivjx49Gq+//rpJ7qpXr568vXDhwihZsmTQbyyTVT5PpUqVwnL/zGLC/9FHH+Ho0aPIkycPbHXs2DGT1H777bd48MEHcdVVV6F48eLYvHkz3nvvPXz11Vf4+uuvce2114Z7V0VEMkU9vCLit2rVqnldLlq0qPlbuXJl0yMYKuXKlQvr/WPFww8/jC+//BK//PILLrzwwuTtDRo0MMnvJ598gtOnT4d1H0VEQkFjeEUkpG677TZz+vvvv9GnTx80bdoUPXv2NNcNHDjQJMY81alTBy1btkS/fv2wc+fOM47BdR/38OHD6Nu3L5o0aYI2bdrgnXfeSbUPmb0/ff/992jfvj0aNWqEO+64Axs2bMDTTz+NZs2aheBdApKSkkwv6hVXXGESzHbt2mHEiBGm19XTjBkzcMstt5j3kfvbu3dvbN++PeDb+Fq5cqV5/nvuuccr2fXEx/Ts3fVnnw8dOmSO71tvvWWe4+abb8Y555xjHmf+/PnJt2Mi3aJFC/To0SPN577yyivN83tiYn7TTTeZY8L7PvbYY9i3b1+az83hGbw/95O91LRjxw6T5PP+3Hcm9KtXrzb3+fHHH72e68SJE3j11Vdx2WWXmce4+OKLza8ZiYmJybeZMGGCue+6detMb/hFF11kHpvPsXfv3lSviY85btw4E1ccKnL11VebfQj0eUUkCBzSICISjAEDBiSxGVm2bFnytpYtWya1aNEiqX379knvvPNO0syZM5Neeuklc91ff/2VtGrVKnNaunRp0pdffpl07rnnJlWvXj3p33//TX6MDh06JDVs2NDrudzH7dixY9J7772X9Pvvvyf169fPPP+nn37qddvM3p/7ze0PPvhg0uzZs5O+/fbbpAsvvDDphhtuSDr77LPP+L7cdttt5v5Hjx5N9zZ33313Us6cOZOGDRuWNG/evKS33347qXDhwknnn39+0rFjx8xtpk2blpSQkJDUp0+fpLlz5ybNmTMnacyYMUnNmjVLfhx/bpMWPi/38Ycffjjj6wlknw8cOGAet0uXLuY4/PTTT0kzZsxIateuXVL+/PmTdu7cmfx4fH/z5Mlj7uNp8eLF5jFeffXV5G2DBw9OypEjR9Kjjz5qjsnEiRPN8axatWrSvn37vJ77nnvuSbrkkkvMa+Ox+/rrr5N2796dVL58+aRatWolffPNN+YxHn744aRu3bqZ+3zyySfJz8Xj1qpVq6QSJUokvfnmm0nz589Pevfdd5OKFSuWdPvttyff7oMPPjD35T7xcfiY48ePTypZsmRS27ZtvV7TkSNHTAwWKlQoafTo0eb9mzBhgomV999/P6DnFZHAKeEVkZAnvHFxcUm//PJL8rbExMR0H4NJMB+DSeiZEtb4+Pik6dOne21nwty8eXOvbZm5PxMTJiVXX3211+22bt1qkrNQJLxTpkwx1w8fPtxrO5NDbh85cqS53LNnz6TixYunuv+JEyeSz/tzm7R07tzZPNeaNWvO+HoC2Wc36SxTpox5L13btm0zifmQIUOSty1YsCBVYktMHj0T4UWLFpnbPf3001634/VFihQxyb7nczNBPHTokFf89ejRwyTrmzdv9noMfgHyTXifeeYZEyv8UuSJCTRvO3XqVK+E1zcZfeutt8x2Ju6uQYMGmW38QpLesfL3eUUkcBrSICIhV6xYMVxyySXJl+Pi4sxfTuIaNWoULr/8cvNzLX8Obtu2rbmePy2fSenSpdG6dWuvbRxisGbNGr/2y5/7z5kzBwcPHsStt96aalwwh2CEwg8//GD+3n333V7b+b5wHzmcwn1O/jTOYQP79+9Pvl3OnDm99utMt0nL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desmbytdujS++OIL2EIJbxgxaUlISMDcuXNx//33h3NXJEJs2LAB77//Pho0aGAuM3batm2L2rVr48477wz37omlPS8jRoxI7mnhkp+NGjXCSy+9hCeffDLcuycW++677zB16lST7IqcSfPmzU2njK00hjeMKlWqZOrVcf1nEX88/PDDyckutWjRwiQvs2bN0hsoabr22mu9flbkOvccCsPhDSLp4c/TDz30ED766CPz07TImZw4cQKLFy82vzyePn0atlEPr0gEO3ToENasWYPrrrsu3LsiFuOHz2+//YZjx45h8uTJJpl59913w71bYnG83HbbbejTp4/XF2yRjMyYMcP80sj5JcShMNdffz1soYRXJIKxB4a9L507dw73rojFjh49asZ+Hz582Izl5bjv6tWrh3u3xFLPPPMMcuXKhd69e4d7VyRCtGnTxnxB4rjdxMREDBkyBLfccgsWLVrkNa43nJTwikTwZBJOImGPnWbdS0ZYycMd9rJ582a0bt3a9PaOHDlSb5x4WbZsmZlMzbkCs2fPNtv27dtnfq5mDJ177rma7CipcCKsKz4+HoMGDcIbb7yBr776SgmviASvf//+ePPNN/HLL79YVfZF7FexYkV06tQJEyZMUMIrqRw5csS0KWPGjEnexsoe7LXjrwQff/yxKW0nkpG4uDgUL17cqrkC6uEViTBPPPEEXnvtNUycONHMihU5U/nD/Pnze23jpBL9KiBpYZviOwn2hhtuML8IqCyZ+NvObNmyxcwv6dKlC2yhhDfM5syZY745HzhwwDQobGg4dqpZs2bh3jWx0NChQ/H888/jxRdfNAuWuB9MKgov6WGywvakadOmpq1hzy4TF5acEhEJ1Relu+66C/Xr18dff/1lasPXqFED99xzD2wRl5SUlBTunYhlF110kVnJxhN7Xr799tuw7ZPYXZZs6dKlqba3bNnSjLsTSesn6tdff93MoGbCyw+hBx54QJPWxG8DBw40Y3jVxkhG6wq88sorZtXYs846C+eff75pZ3Lnzg1bKOEVERERkaimhSdEREREJKop4RURERGRqKaEV0RERESimhJeEREREYlqSnhFREREJKop4RURERGRqKaEV0RERESimhJeERE547Khn376KQ4fPqx3SkQikhaeEBGxEBfB/Oyzz9K8rnHjxmbFtOyyadMmVK5cGevWrUO1atWy7XlFREIlR8geSUREQub06dO45ZZb0KJFC1SsWNHrurPPPjtbE14RkUinhFdExGJdu3bF7bffnu5QgwkTJuDKK6/Ejh07sGbNGlSqVAn169dPddudO3fi999/N2vbc537ggULprrNoUOHMHfuXNO7fN5556V5mw0bNmDVqlUoV64cGjZsGKJXKSKStZTwiohEqD179phe4CuuuMIMN6hSpQpmzZqFLl26YNSoUcm3Gzt2LB599FE0b94cf//9NzZv3owvv/wSbdu2Tb7N+PHjcd9995mhCyVKlMDGjRvxwQcfmPu4HnnkEaxfv97cZvr06bjnnnswZsyYbH/dIiKBUsIrImIx9rjmyOHdVF9yySUoWrRo8uWTJ09i5cqVyJkzp+nFZe9sx44d0apVK/z5558mUWXyetNNN5nb9+jRwySrq1evNj2+vM1tt92GF154AT179jS32bVrl0l6PRUvXhzffvst4uLiTMLbrl079O3bFxUqVMiW90JEJFhKeEVELLZw4ULs3bvXa1uTJk28Et5evXqZZJeaNWtmem4///xzk/CyJ7d8+fLJyS4NGDAAr7zyCubNm4fWrVvjk08+QalSpUwi7CpZsqQ5eXrggQdMsksXXHAB4uPjsXbtWiW8ImI9JbwiIhE6htfFcbueOOSAwxaIfznUwRMT2fz58yffZsuWLab6gpvMpqdIkSLJ5xMSEkzP87FjxwJ+TSIi2U11eEVEItyBAwdSXS5WrJg5z7/79+/3uv748eM4cuRI8m0KFSqEffv2ZeMei4hkLyW8IiIR7ptvvkk+z0lpU6ZMQcuWLZOHHixZssRMNvOcoJYnTx5Tz5cuvfRSLF26FH/88UeqSXEiItFAQxpERCJs0lrNmjXRqFGj5MuckHbq1CnUqlULb731lhmze+eddyYns+3btzcT3TjWlwnx8OHDMXDgwOQxurzujjvuwEUXXWQmrbFKA5NoPsatt96aza9YRCT0lPCKiFiIE8I40YwT1jx7cIkJrGfC++OPP5peXVZouOaaa8zkM3cSG3Hi2vvvv4/Zs2ebqgxcwa1Dhw5ej/nee++Z55k4cSJ2796NPn36mESYON6X++Jbl7dTp04oW7ZsFr0DIiKho6WFRUQilJb8FRHxj8bwioiIiEhUU8IrIhKh0htqICIi3jSkQURERESimnp4RURERCSqKeEVERERkaimhFdEREREopoSXhERERGJakp4RURERCSqKeEVERERkaimhFdEREREopoSXhERERGJakp4RURERATR7P8BuoctaF/ErrYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ + "# Model Training and Loss Tracking\n", + "\n", + "# Initialize a list to keep track of the loss for plotting\n", + "epoch_losses = []\n", + "\n", "# Iterative training loop\n", "epochs = 5\n", "for e in range(epochs):\n", @@ -561,8 +576,8 @@ " values = record.split(\",\")\n", " \n", " # Input data normalization\n", - " data = np.asarray(values[1:], dtype=int)/255*0.99+0.01\n", - " index = np.asarray(values[0],dtype=int)\n", + " data = np.asarray(values[1:], dtype=float) / 255.0 * 0.99 + 0.01\n", + " index = int(values[0])\n", " \n", " # Target Vector construction\n", " target = np.zeros(outNodes) + 0.01\n", @@ -577,8 +592,77 @@ " # Train\n", " MyANN.backpropagation(data, target, learningRate)\n", " \n", + " # Calculate and store the average loss for this epoch\n", " average_loss = total_loss / len(list)\n", - " print(f\"Epoch {e+1}/{epochs} - Average Loss: {average_loss:.4f}\")" + " epoch_losses.append(average_loss)\n", + " print(f\"Epoch {e+1}/{epochs} - Average Loss: {average_loss:.4f}\")\n", + "\n", + "# --- Plotting the Learning Curve ---\n", + "plt.figure(figsize=(8, 5))\n", + "plt.plot(range(1, epochs + 1), epoch_losses, marker='o', color='red', linewidth=2)\n", + "\n", + "plt.title(\"Training Loss Convergence\")\n", + "plt.xlabel(\"Epoch\")\n", + "plt.ylabel(\"Average Loss (SSE)\")\n", + "plt.xticks(range(1, epochs + 1))\n", + "plt.grid(True, linestyle='--', alpha=0.7)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "1608f5b1", + "metadata": {}, + "source": [ + "### Final Trained Weights Extraction\n", + "\n", + "After completing the training epochs, the optimal state of the network is fully captured within its weight matrices ($W_{ih}$ and $W_{ho}$). These resulting numerical arrays act as the permanent \"memory\" of the model. " + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "88385d55", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FINAL WEIGHTS: HIDDEN TO OUTPUT LAYER (Who)\n", + "Matrix Dimensions: (10, 100)\n", + "--------------------------------------------------\n", + "[[-1.67078471 0.15194614 -1.7767362 ]\n", + " [ 1.62235502 -1.00391943 -0.37989541]\n", + " [-1.26930144 0.42418591 0.62579789]]\n", + "\n", + "==================================================\n", + "\n", + "FINAL WEIGHTS: INPUT TO HIDDEN LAYER (Wih)\n", + "Matrix Dimensions: (100, 784)\n", + "--------------------------------------------------\n", + "[[ 0.46048182 -0.69392989 0.22993549]\n", + " [-0.94519842 0.42366932 1.41797905]\n", + " [ 0.36351595 -0.27497497 1.32172583]]\n" + ] + } + ], + "source": [ + "# Display the final trained weight matrices\n", + "# Displaying only a representative 3x3 slice to keep the notebook clean\n", + "\n", + "print(\"FINAL WEIGHTS: HIDDEN TO OUTPUT LAYER (Who)\")\n", + "print(f\"Matrix Dimensions: {MyANN.who.shape}\")\n", + "print(\"-\" * 50)\n", + "print(MyANN.who[:3, :3])\n", + "\n", + "print(\"\\n\" + \"=\"*50 + \"\\n\")\n", + "\n", + "print(\"FINAL WEIGHTS: INPUT TO HIDDEN LAYER (Wih)\")\n", + "print(f\"Matrix Dimensions: {MyANN.wih.shape}\")\n", + "print(\"-\" * 50)\n", + "print(MyANN.wih[:3, :3])" ] }, { diff --git a/README.md b/README.md index 9b20f2d..5b46669 100644 --- a/README.md +++ b/README.md @@ -347,6 +347,11 @@ MyANN = ann(inputNodes, hiddenNodes, outNodes) ```python +# Model Training and Loss Tracking + +# Initialize a list to keep track of the loss for plotting +epoch_losses = [] + # Iterative training loop epochs = 5 for e in range(epochs): @@ -355,8 +360,8 @@ for e in range(epochs): values = record.split(",") # Input data normalization - data = np.asarray(values[1:], dtype=int)/255*0.99+0.01 - index = np.asarray(values[0],dtype=int) + data = np.asarray(values[1:], dtype=float) / 255.0 * 0.99 + 0.01 + index = int(values[0]) # Target Vector construction target = np.zeros(outNodes) + 0.01 @@ -371,8 +376,22 @@ for e in range(epochs): # Train MyANN.backpropagation(data, target, learningRate) + # Calculate and store the average loss for this epoch average_loss = total_loss / len(list) + epoch_losses.append(average_loss) print(f"Epoch {e+1}/{epochs} - Average Loss: {average_loss:.4f}") + +# --- Plotting the Learning Curve --- +plt.figure(figsize=(8, 5)) +plt.plot(range(1, epochs + 1), epoch_losses, marker='o', color='red', linewidth=2) + +plt.title("Training Loss Convergence") +plt.xlabel("Epoch") +plt.ylabel("Average Loss (SSE)") +plt.xticks(range(1, epochs + 1)) +plt.grid(True, linestyle='--', alpha=0.7) + +plt.show() ``` Epoch 1/5 - Average Loss: 0.0972 @@ -382,6 +401,51 @@ for e in range(epochs): Epoch 5/5 - Average Loss: 0.0361 + + +![png](README_files/README_28_1.png) + + + +### Final Trained Weights Extraction + +After completing the training epochs, the optimal state of the network is fully captured within its weight matrices ($W_{ih}$ and $W_{ho}$). These resulting numerical arrays act as the permanent "memory" of the model. + + +```python +# Display the final trained weight matrices +# Displaying only a representative 3x3 slice to keep the notebook clean + +print("FINAL WEIGHTS: HIDDEN TO OUTPUT LAYER (Who)") +print(f"Matrix Dimensions: {MyANN.who.shape}") +print("-" * 50) +print(MyANN.who[:3, :3]) + +print("\n" + "="*50 + "\n") + +print("FINAL WEIGHTS: INPUT TO HIDDEN LAYER (Wih)") +print(f"Matrix Dimensions: {MyANN.wih.shape}") +print("-" * 50) +print(MyANN.wih[:3, :3]) +``` + + FINAL WEIGHTS: HIDDEN TO OUTPUT LAYER (Who) + Matrix Dimensions: (10, 100) + -------------------------------------------------- + [[-1.67078471 0.15194614 -1.7767362 ] + [ 1.62235502 -1.00391943 -0.37989541] + [-1.26930144 0.42418591 0.62579789]] + + ================================================== + + FINAL WEIGHTS: INPUT TO HIDDEN LAYER (Wih) + Matrix Dimensions: (100, 784) + -------------------------------------------------- + [[ 0.46048182 -0.69392989 0.22993549] + [-0.94519842 0.42366932 1.41797905] + [ 0.36351595 -0.27497497 1.32172583]] + + ## 5. Validation & Inference Evaluating model performance using unseen test data. A new sample is normalized and processed to extract the final prediction vector, which is then visually compared to the ground truth image. @@ -467,7 +531,7 @@ plt.show() -![png](README_files/README_33_0.png) +![png](README_files/README_35_0.png) @@ -558,7 +622,7 @@ plt.show() -![png](README_files/README_35_1.png) +![png](README_files/README_37_1.png) @@ -645,7 +709,7 @@ plt.show() -![png](README_files/README_37_1.png) +![png](README_files/README_39_1.png) diff --git a/README_files/README_28_1.png b/README_files/README_28_1.png new file mode 100644 index 0000000..ba91de3 Binary files /dev/null and b/README_files/README_28_1.png differ diff --git a/README_files/README_33_0.png b/README_files/README_35_0.png similarity index 100% rename from README_files/README_33_0.png rename to README_files/README_35_0.png diff --git a/README_files/README_35_1.png b/README_files/README_35_1.png deleted file mode 100644 index a308e5f..0000000 Binary files a/README_files/README_35_1.png and /dev/null differ diff --git a/README_files/README_37_1.png b/README_files/README_37_1.png index 35a5236..a308e5f 100644 Binary files a/README_files/README_37_1.png and b/README_files/README_37_1.png differ diff --git a/README_files/README_39_1.png b/README_files/README_39_1.png new file mode 100644 index 0000000..35a5236 Binary files /dev/null and b/README_files/README_39_1.png differ