ved1beta commited on
Commit
e1d27d4
·
1 Parent(s): fd35fa1

ho ja bhai

Browse files
Files changed (1) hide show
  1. main@@.ipynb +397 -39
main@@.ipynb CHANGED
@@ -2,7 +2,7 @@
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
- "execution_count": 43,
6
  "id": "90418142-03d2-4803-b187-f112f426a008",
7
  "metadata": {},
8
  "outputs": [],
@@ -17,7 +17,7 @@
17
  },
18
  {
19
  "cell_type": "code",
20
- "execution_count": 44,
21
  "id": "03498927-394e-4438-98f3-27d71e3a8920",
22
  "metadata": {},
23
  "outputs": [
@@ -35,7 +35,7 @@
35
  },
36
  {
37
  "cell_type": "code",
38
- "execution_count": 45,
39
  "id": "65ffc9ef-eeb4-4318-b648-d257d3bb4b34",
40
  "metadata": {},
41
  "outputs": [],
@@ -45,7 +45,7 @@
45
  },
46
  {
47
  "cell_type": "code",
48
- "execution_count": 46,
49
  "id": "670c7b49-01f3-446a-bd60-b1e1710a30a6",
50
  "metadata": {},
51
  "outputs": [
@@ -5581,7 +5581,7 @@
5581
  "4 0 "
5582
  ]
5583
  },
5584
- "execution_count": 46,
5585
  "metadata": {},
5586
  "output_type": "execute_result"
5587
  }
@@ -5592,7 +5592,7 @@
5592
  },
5593
  {
5594
  "cell_type": "code",
5595
- "execution_count": 47,
5596
  "id": "b6de1f03-d0bd-48d2-96f6-cfb5bdca6819",
5597
  "metadata": {},
5598
  "outputs": [],
@@ -5611,7 +5611,7 @@
5611
  },
5612
  {
5613
  "cell_type": "code",
5614
- "execution_count": 48,
5615
  "id": "5aa2c7da-e7e6-426d-9867-86937a76892c",
5616
  "metadata": {},
5617
  "outputs": [],
@@ -5622,19 +5622,20 @@
5622
  },
5623
  {
5624
  "cell_type": "code",
5625
- "execution_count": 49,
5626
  "id": "2fa2a087-fec8-4a7a-8c94-95520e87e83c",
5627
  "metadata": {},
5628
  "outputs": [],
5629
  "source": [
5630
  "data_dev = data[0:1000].T\n",
5631
  "X_dev = data_dev[1:n]\n",
5632
- "y_dev = data_dev[0]"
 
5633
  ]
5634
  },
5635
  {
5636
  "cell_type": "code",
5637
- "execution_count": 50,
5638
  "id": "b00b5e87-6762-4d9d-9089-268ab82cdfee",
5639
  "metadata": {},
5640
  "outputs": [],
@@ -5648,7 +5649,7 @@
5648
  },
5649
  {
5650
  "cell_type": "code",
5651
- "execution_count": 65,
5652
  "id": "3dfbc08b-676c-424f-9620-5a15716a291a",
5653
  "metadata": {},
5654
  "outputs": [],
@@ -5663,7 +5664,7 @@
5663
  },
5664
  {
5665
  "cell_type": "code",
5666
- "execution_count": 79,
5667
  "id": "cddd98b0-9287-4398-a0e1-dc985efccbf2",
5668
  "metadata": {},
5669
  "outputs": [],
@@ -5672,13 +5673,14 @@
5672
  " return np.maximum(0, Z)\n",
5673
  " \n",
5674
  "def softmax(Z):\n",
5675
- " return exp(Z)/ sum(np.exp(Z))\n",
 
5676
  " \n",
5677
  "def forward_prop(W1, b1 , W2, b2, X):\n",
5678
  " Z1 = W1.dot(X) + b1\n",
5679
  " A1 = ReLu(Z1)\n",
5680
  " Z2 = W2.dot(A1) + b2 \n",
5681
- " A2 = softmax(A1)\n",
5682
  " \n",
5683
  " return Z1 , Z2 , A1 , A2\n",
5684
  " "
@@ -5686,17 +5688,17 @@
5686
  },
5687
  {
5688
  "cell_type": "code",
5689
- "execution_count": 80,
5690
  "id": "90c76872-2a23-4756-8d04-dfecce8fbcd0",
5691
  "metadata": {},
5692
  "outputs": [],
5693
  "source": [
5694
  "def one_hot(Y):\n",
5695
- " one_hot_Y = np.zeroes((Y.size, Y.max() + 1))\n",
5696
  " one_hot_Y[np.arange(Y.size) , Y] = 1\n",
5697
  " return one_hot_Y.T\n",
5698
  "\n",
5699
- "def deriv_ReLU():\n",
5700
  " return Z > 0\n",
5701
  " \n",
5702
  "def back_prop(Z1 , Z2 , A1 , A2, W2 ,X, Y ):\n",
@@ -5706,29 +5708,30 @@
5706
  " dW2 = 1/m * dZ2.dot(A1.T)\n",
5707
  " db2 = 1/m * np.sum(dZ2)\n",
5708
  " dZ1 = W2.T.dot(dZ2) *deriv_ReLU(Z1)\n",
5709
- " dW1 = 1/m * dZ2.dot(X.T)\n",
5710
  " db1 = 1/m * np.sum(dZ1)\n",
5711
  " return dW2 ,dW1, db1, db2"
5712
  ]
5713
  },
5714
  {
5715
  "cell_type": "code",
5716
- "execution_count": 81,
5717
  "id": "2735f3d3-df5a-465f-aa59-a247ecb27343",
5718
  "metadata": {},
5719
  "outputs": [],
5720
  "source": [
5721
- "def update_params(W1, b1, W2 , b2 ,dW2 ,dW1, db1, db2, alpha):\n",
5722
- " W1 = W1 - alpha * dW1\n",
 
5723
  " b1 = b1 - alpha * db1\n",
5724
- " W2 = W1 - alpha * dW2\n",
5725
- " b2 = b1 - alpha * db2\n",
5726
- " return W1 , b1 , W2 , b2 \n"
5727
  ]
5728
  },
5729
  {
5730
  "cell_type": "code",
5731
- "execution_count": 82,
5732
  "id": "9b2e810f-9911-445b-944b-6a7488647b80",
5733
  "metadata": {},
5734
  "outputs": [],
@@ -5757,22 +5760,164 @@
5757
  },
5758
  {
5759
  "cell_type": "code",
5760
- "execution_count": 83,
5761
  "id": "543f85cc-6171-4d5d-80c4-3206e44e1714",
5762
  "metadata": {},
5763
  "outputs": [
5764
  {
5765
- "ename": "TypeError",
5766
- "evalue": "only length-1 arrays can be converted to Python scalars",
5767
- "output_type": "error",
5768
- "traceback": [
5769
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
5770
- "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
5771
- "Cell \u001b[0;32mIn[83], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m W1, b1, W2, b2 \u001b[38;5;241m=\u001b[39m \u001b[43mgradient_descent\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mY_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m500\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0.10\u001b[39;49m\u001b[43m)\u001b[49m\n",
5772
- "Cell \u001b[0;32mIn[82], line 11\u001b[0m, in \u001b[0;36mgradient_descent\u001b[0;34m(X, Y, iter, alpha)\u001b[0m\n\u001b[1;32m 9\u001b[0m W1, b1 , W2 , b2 \u001b[38;5;241m=\u001b[39m init_params()\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28miter\u001b[39m):\n\u001b[0;32m---> 11\u001b[0m Z1 , Z2 , A1 , A2\u001b[38;5;241m=\u001b[39m \u001b[43mforward_prop\u001b[49m\u001b[43m(\u001b[49m\u001b[43mW1\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mb1\u001b[49m\u001b[43m \u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mW2\u001b[49m\u001b[43m \u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mb2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 12\u001b[0m dW1 , dW2, db1 , db2 \u001b[38;5;241m=\u001b[39mback_prop(Z1 , Z2 , A1 , A2, W2, X , Y)\n\u001b[1;32m 13\u001b[0m W1, b1 , W2, b2 \u001b[38;5;241m=\u001b[39m update_params(W1, b1, W2 , b2 ,dW2 ,dW1, db1, db2, alpha)\n",
5773
- "Cell \u001b[0;32mIn[79], line 11\u001b[0m, in \u001b[0;36mforward_prop\u001b[0;34m(W1, b1, W2, b2, X)\u001b[0m\n\u001b[1;32m 9\u001b[0m A1 \u001b[38;5;241m=\u001b[39m ReLu(Z1)\n\u001b[1;32m 10\u001b[0m Z2 \u001b[38;5;241m=\u001b[39m W2\u001b[38;5;241m.\u001b[39mdot(A1) \u001b[38;5;241m+\u001b[39m b2 \n\u001b[0;32m---> 11\u001b[0m A2 \u001b[38;5;241m=\u001b[39m \u001b[43msoftmax\u001b[49m\u001b[43m(\u001b[49m\u001b[43mA1\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Z1 , Z2 , A1 , A2\n",
5774
- "Cell \u001b[0;32mIn[79], line 5\u001b[0m, in \u001b[0;36msoftmax\u001b[0;34m(Z)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msoftmax\u001b[39m(Z):\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mexp\u001b[49m\u001b[43m(\u001b[49m\u001b[43mZ\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m/\u001b[39m \u001b[38;5;28msum\u001b[39m(np\u001b[38;5;241m.\u001b[39mexp(Z))\n",
5775
- "\u001b[0;31mTypeError\u001b[0m: only length-1 arrays can be converted to Python scalars"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5776
  ]
5777
  }
5778
  ],
@@ -5782,16 +5927,229 @@
5782
  },
5783
  {
5784
  "cell_type": "code",
5785
- "execution_count": null,
5786
  "id": "4a6a9819-bf7f-443b-b654-8b4a94c07d4f",
5787
  "metadata": {},
5788
  "outputs": [],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5789
  "source": []
5790
  },
5791
  {
5792
  "cell_type": "code",
5793
  "execution_count": null,
5794
- "id": "430ac2c1-f81c-488c-9b94-433d750d459e",
5795
  "metadata": {},
5796
  "outputs": [],
5797
  "source": []
 
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
+ "execution_count": 4,
6
  "id": "90418142-03d2-4803-b187-f112f426a008",
7
  "metadata": {},
8
  "outputs": [],
 
17
  },
18
  {
19
  "cell_type": "code",
20
+ "execution_count": 5,
21
  "id": "03498927-394e-4438-98f3-27d71e3a8920",
22
  "metadata": {},
23
  "outputs": [
 
35
  },
36
  {
37
  "cell_type": "code",
38
+ "execution_count": 6,
39
  "id": "65ffc9ef-eeb4-4318-b648-d257d3bb4b34",
40
  "metadata": {},
41
  "outputs": [],
 
45
  },
46
  {
47
  "cell_type": "code",
48
+ "execution_count": 7,
49
  "id": "670c7b49-01f3-446a-bd60-b1e1710a30a6",
50
  "metadata": {},
51
  "outputs": [
 
5581
  "4 0 "
5582
  ]
5583
  },
5584
+ "execution_count": 7,
5585
  "metadata": {},
5586
  "output_type": "execute_result"
5587
  }
 
5592
  },
5593
  {
5594
  "cell_type": "code",
5595
+ "execution_count": 8,
5596
  "id": "b6de1f03-d0bd-48d2-96f6-cfb5bdca6819",
5597
  "metadata": {},
5598
  "outputs": [],
 
5611
  },
5612
  {
5613
  "cell_type": "code",
5614
+ "execution_count": 9,
5615
  "id": "5aa2c7da-e7e6-426d-9867-86937a76892c",
5616
  "metadata": {},
5617
  "outputs": [],
 
5622
  },
5623
  {
5624
  "cell_type": "code",
5625
+ "execution_count": 10,
5626
  "id": "2fa2a087-fec8-4a7a-8c94-95520e87e83c",
5627
  "metadata": {},
5628
  "outputs": [],
5629
  "source": [
5630
  "data_dev = data[0:1000].T\n",
5631
  "X_dev = data_dev[1:n]\n",
5632
+ "y_dev = data_dev[0]\n",
5633
+ "X_dev = X_dev / 255."
5634
  ]
5635
  },
5636
  {
5637
  "cell_type": "code",
5638
+ "execution_count": 11,
5639
  "id": "b00b5e87-6762-4d9d-9089-268ab82cdfee",
5640
  "metadata": {},
5641
  "outputs": [],
 
5649
  },
5650
  {
5651
  "cell_type": "code",
5652
+ "execution_count": 12,
5653
  "id": "3dfbc08b-676c-424f-9620-5a15716a291a",
5654
  "metadata": {},
5655
  "outputs": [],
 
5664
  },
5665
  {
5666
  "cell_type": "code",
5667
+ "execution_count": 20,
5668
  "id": "cddd98b0-9287-4398-a0e1-dc985efccbf2",
5669
  "metadata": {},
5670
  "outputs": [],
 
5673
  " return np.maximum(0, Z)\n",
5674
  " \n",
5675
  "def softmax(Z):\n",
5676
+ " exp_Z = np.exp(Z - np.max(Z, axis=0, keepdims=True))\n",
5677
+ " return exp_Z / np.sum(exp_Z, axis=0, keepdims=True)\n",
5678
  " \n",
5679
  "def forward_prop(W1, b1 , W2, b2, X):\n",
5680
  " Z1 = W1.dot(X) + b1\n",
5681
  " A1 = ReLu(Z1)\n",
5682
  " Z2 = W2.dot(A1) + b2 \n",
5683
+ " A2 = softmax(Z2)\n",
5684
  " \n",
5685
  " return Z1 , Z2 , A1 , A2\n",
5686
  " "
 
5688
  },
5689
  {
5690
  "cell_type": "code",
5691
+ "execution_count": 21,
5692
  "id": "90c76872-2a23-4756-8d04-dfecce8fbcd0",
5693
  "metadata": {},
5694
  "outputs": [],
5695
  "source": [
5696
  "def one_hot(Y):\n",
5697
+ " one_hot_Y = np.zeros((Y.size, Y.max() + 1))\n",
5698
  " one_hot_Y[np.arange(Y.size) , Y] = 1\n",
5699
  " return one_hot_Y.T\n",
5700
  "\n",
5701
+ "def deriv_ReLU(Z):\n",
5702
  " return Z > 0\n",
5703
  " \n",
5704
  "def back_prop(Z1 , Z2 , A1 , A2, W2 ,X, Y ):\n",
 
5708
  " dW2 = 1/m * dZ2.dot(A1.T)\n",
5709
  " db2 = 1/m * np.sum(dZ2)\n",
5710
  " dZ1 = W2.T.dot(dZ2) *deriv_ReLU(Z1)\n",
5711
+ " dW1 = 1/m * dZ1.dot(X.T)\n",
5712
  " db1 = 1/m * np.sum(dZ1)\n",
5713
  " return dW2 ,dW1, db1, db2"
5714
  ]
5715
  },
5716
  {
5717
  "cell_type": "code",
5718
+ "execution_count": 22,
5719
  "id": "2735f3d3-df5a-465f-aa59-a247ecb27343",
5720
  "metadata": {},
5721
  "outputs": [],
5722
  "source": [
5723
+ "def update_params(W1, b1, W2, b2, dW2, dW1, db1, db2, alpha):\n",
5724
+ " \n",
5725
+ " W1 = W1 - alpha * dW2\n",
5726
  " b1 = b1 - alpha * db1\n",
5727
+ " W2 = W2 - alpha * dW1\n",
5728
+ " b2 = b2 - alpha * db2\n",
5729
+ " return W1, b1, W2, b2\n"
5730
  ]
5731
  },
5732
  {
5733
  "cell_type": "code",
5734
+ "execution_count": 23,
5735
  "id": "9b2e810f-9911-445b-944b-6a7488647b80",
5736
  "metadata": {},
5737
  "outputs": [],
 
5760
  },
5761
  {
5762
  "cell_type": "code",
5763
+ "execution_count": 24,
5764
  "id": "543f85cc-6171-4d5d-80c4-3206e44e1714",
5765
  "metadata": {},
5766
  "outputs": [
5767
  {
5768
+ "name": "stdout",
5769
+ "output_type": "stream",
5770
+ "text": [
5771
+ "Iteration: 0\n",
5772
+ "[4 4 4 ... 4 7 2] [2 6 4 ... 2 6 0]\n",
5773
+ "0.10421951219512195\n",
5774
+ "Iteration: 10\n",
5775
+ "[4 4 4 ... 6 4 4] [2 6 4 ... 2 6 0]\n",
5776
+ "0.1402439024390244\n",
5777
+ "Iteration: 20\n",
5778
+ "[2 4 4 ... 6 4 4] [2 6 4 ... 2 6 0]\n",
5779
+ "0.18260975609756097\n",
5780
+ "Iteration: 30\n",
5781
+ "[2 4 4 ... 6 4 2] [2 6 4 ... 2 6 0]\n",
5782
+ "0.22639024390243903\n",
5783
+ "Iteration: 40\n",
5784
+ "[2 4 4 ... 6 4 2] [2 6 4 ... 2 6 0]\n",
5785
+ "0.27358536585365856\n",
5786
+ "Iteration: 50\n",
5787
+ "[2 4 4 ... 6 4 0] [2 6 4 ... 2 6 0]\n",
5788
+ "0.3517073170731707\n",
5789
+ "Iteration: 60\n",
5790
+ "[2 4 4 ... 6 4 0] [2 6 4 ... 2 6 0]\n",
5791
+ "0.40836585365853656\n",
5792
+ "Iteration: 70\n",
5793
+ "[2 4 4 ... 6 4 0] [2 6 4 ... 2 6 0]\n",
5794
+ "0.4554878048780488\n",
5795
+ "Iteration: 80\n",
5796
+ "[2 4 4 ... 6 4 0] [2 6 4 ... 2 6 0]\n",
5797
+ "0.49997560975609756\n",
5798
+ "Iteration: 90\n",
5799
+ "[2 4 4 ... 6 4 0] [2 6 4 ... 2 6 0]\n",
5800
+ "0.5408780487804878\n",
5801
+ "Iteration: 100\n",
5802
+ "[2 4 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5803
+ "0.5816341463414634\n",
5804
+ "Iteration: 110\n",
5805
+ "[2 4 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5806
+ "0.6165121951219512\n",
5807
+ "Iteration: 120\n",
5808
+ "[2 4 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5809
+ "0.6435853658536586\n",
5810
+ "Iteration: 130\n",
5811
+ "[2 4 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5812
+ "0.6667073170731708\n",
5813
+ "Iteration: 140\n",
5814
+ "[2 4 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5815
+ "0.6854634146341464\n",
5816
+ "Iteration: 150\n",
5817
+ "[2 4 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5818
+ "0.7005121951219512\n",
5819
+ "Iteration: 160\n",
5820
+ "[2 6 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5821
+ "0.7150487804878048\n",
5822
+ "Iteration: 170\n",
5823
+ "[2 6 4 ... 6 6 0] [2 6 4 ... 2 6 0]\n",
5824
+ "0.7254146341463414\n",
5825
+ "Iteration: 180\n",
5826
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5827
+ "0.7356585365853658\n",
5828
+ "Iteration: 190\n",
5829
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5830
+ "0.7440243902439024\n",
5831
+ "Iteration: 200\n",
5832
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5833
+ "0.7522926829268293\n",
5834
+ "Iteration: 210\n",
5835
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5836
+ "0.759609756097561\n",
5837
+ "Iteration: 220\n",
5838
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5839
+ "0.766\n",
5840
+ "Iteration: 230\n",
5841
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5842
+ "0.7719268292682927\n",
5843
+ "Iteration: 240\n",
5844
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5845
+ "0.777\n",
5846
+ "Iteration: 250\n",
5847
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5848
+ "0.781829268292683\n",
5849
+ "Iteration: 260\n",
5850
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5851
+ "0.7859756097560976\n",
5852
+ "Iteration: 270\n",
5853
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5854
+ "0.7901951219512195\n",
5855
+ "Iteration: 280\n",
5856
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5857
+ "0.7943902439024391\n",
5858
+ "Iteration: 290\n",
5859
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5860
+ "0.7986829268292683\n",
5861
+ "Iteration: 300\n",
5862
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5863
+ "0.8016341463414635\n",
5864
+ "Iteration: 310\n",
5865
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5866
+ "0.8048780487804879\n",
5867
+ "Iteration: 320\n",
5868
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5869
+ "0.8074878048780488\n",
5870
+ "Iteration: 330\n",
5871
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5872
+ "0.810829268292683\n",
5873
+ "Iteration: 340\n",
5874
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5875
+ "0.8133170731707317\n",
5876
+ "Iteration: 350\n",
5877
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5878
+ "0.8162682926829268\n",
5879
+ "Iteration: 360\n",
5880
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5881
+ "0.8192926829268292\n",
5882
+ "Iteration: 370\n",
5883
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5884
+ "0.8213170731707317\n",
5885
+ "Iteration: 380\n",
5886
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5887
+ "0.8239024390243902\n",
5888
+ "Iteration: 390\n",
5889
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5890
+ "0.8258048780487804\n",
5891
+ "Iteration: 400\n",
5892
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5893
+ "0.8281219512195122\n",
5894
+ "Iteration: 410\n",
5895
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5896
+ "0.8301463414634146\n",
5897
+ "Iteration: 420\n",
5898
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5899
+ "0.8321951219512195\n",
5900
+ "Iteration: 430\n",
5901
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5902
+ "0.8337317073170731\n",
5903
+ "Iteration: 440\n",
5904
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5905
+ "0.8355853658536585\n",
5906
+ "Iteration: 450\n",
5907
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5908
+ "0.8376585365853658\n",
5909
+ "Iteration: 460\n",
5910
+ "[2 6 4 ... 7 6 0] [2 6 4 ... 2 6 0]\n",
5911
+ "0.8391463414634146\n",
5912
+ "Iteration: 470\n",
5913
+ "[2 6 4 ... 9 6 0] [2 6 4 ... 2 6 0]\n",
5914
+ "0.840780487804878\n",
5915
+ "Iteration: 480\n",
5916
+ "[2 6 4 ... 9 6 0] [2 6 4 ... 2 6 0]\n",
5917
+ "0.8422682926829268\n",
5918
+ "Iteration: 490\n",
5919
+ "[2 6 4 ... 9 6 0] [2 6 4 ... 2 6 0]\n",
5920
+ "0.8439512195121951\n"
5921
  ]
5922
  }
5923
  ],
 
5927
  },
5928
  {
5929
  "cell_type": "code",
5930
+ "execution_count": 25,
5931
  "id": "4a6a9819-bf7f-443b-b654-8b4a94c07d4f",
5932
  "metadata": {},
5933
  "outputs": [],
5934
+ "source": [
5935
+ "def make_predictions(X, W1, b1, W2, b2):\n",
5936
+ " _, _, _, A2 = forward_prop(W1, b1, W2, b2, X)\n",
5937
+ " predictions = get_predictions(A2)\n",
5938
+ " return predictions\n",
5939
+ "\n",
5940
+ "def test_prediction(index, W1, b1, W2, b2):\n",
5941
+ " current_image = X_train[:, index, None]\n",
5942
+ " prediction = make_predictions(X_train[:, index, None], W1, b1, W2, b2)\n",
5943
+ " label = Y_train[index]\n",
5944
+ " print(\"Prediction: \", prediction)\n",
5945
+ " print(\"Label: \", label)\n",
5946
+ " \n",
5947
+ " current_image = current_image.reshape((28, 28)) * 255\n",
5948
+ " plt.gray()\n",
5949
+ " plt.imshow(current_image, interpolation='nearest')\n",
5950
+ " plt.show()"
5951
+ ]
5952
+ },
5953
+ {
5954
+ "cell_type": "code",
5955
+ "execution_count": 26,
5956
+ "id": "430ac2c1-f81c-488c-9b94-433d750d459e",
5957
+ "metadata": {},
5958
+ "outputs": [
5959
+ {
5960
+ "name": "stdout",
5961
+ "output_type": "stream",
5962
+ "text": [
5963
+ "Prediction: [2]\n",
5964
+ "Label: 2\n"
5965
+ ]
5966
+ },
5967
+ {
5968
+ "data": {
5969
+ "image/png": "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mEAgAQBMIJAAACYQSAAAEwgkAIAJBBIAwASP4zhOuJu4EL/fL6/XG+42IlZMjPsHus+YMSOguR544AHXNRs3bnRd895777muwcCkp6e7rqmtrQ3JPPPmzXNds3v3btc1GDifz6fExMQ+13OGBAAwgUACAJhAIAEATCCQAAAmEEgAABMIJACACQQSAMAEAgkAYAKBBAAwgUACAJhAIAEATCCQAAAmuH/yJiJKR0eH65q///3vAc31ox/9KKA62FdfX++6ZufOna5rfvazn7muWbRokesaHq5qE2dIAAATCCQAgAkEEgDABAIJAGACgQQAMIFAAgCYQCABAEwgkAAAJhBIAAATCCQAgAkEEgDABAIJAGACD1cFEBQTJkwIyTwZGRkhmQfBxxkSAMAE14HU3NyskpISzZ07V6mpqfJ4PCorK+t124MHD+q6665TQkKCkpKSVFRUpC+++GKgPQMAopDrQGpoaNCWLVvU3t6uJUuW9Lndp59+qlmzZunrr7/Wq6++queff16fffaZZs6cqVOnTg2kZwBAFHL9HlJGRoaamprk8Xh0+vRpPffcc71uV1paqtjYWFVXVysxMVGSNG3aNE2YMEGbNm3SY489NrDOAQBRxfUZksfjkcfjueA2HR0dqq6u1o033tgVRtK5MJs9e7Z27NjhvlMAQFQLyocajhw5otbWVuXm5vZYl5ubq7q6OrW1tfVa297eLr/f320AAKJfUAKpoaFBkpScnNxjXXJyshzHUVNTU6+1FRUV8nq9XSM9PT0YLQIAjAnqx74vdGmvr3Vr1qyRz+frGvX19cFqDwBgSFBujE1JSZH0f2dK/6uxsVEej0dJSUm91sbGxio2NjYYbQEADAvKGdL48eMVFxenQ4cO9Vh36NAhZWVlaeTIkcGYGgAQoYISSDExMVq0aJG2b9+u5ubmruVffvml9uzZo6KiomBMCwCIYAFdstu5c6fOnDnTFTYff/yxqqqqJEnz58/XqFGjVF5erunTp2vhwoVavXq12traVFpaqtGjR+v+++8fvJ8AABAVPI7jOG6LMjMzdfz48V7XHT16VJmZmZKkAwcO6IEHHtC7776rmJgYzZkzR5s2bdL48eP7PZff75fX63XbIoAwu+WWW1zXvPTSS65r3njjDdc1hYWFrmswcD6fr9u9qd8W0BnSsWPH+rXdtGnT9Pbbbwcy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",
5970
+ "text/plain": [
5971
+ "<Figure size 640x480 with 1 Axes>"
5972
+ ]
5973
+ },
5974
+ "metadata": {},
5975
+ "output_type": "display_data"
5976
+ },
5977
+ {
5978
+ "name": "stdout",
5979
+ "output_type": "stream",
5980
+ "text": [
5981
+ "Prediction: [6]\n",
5982
+ "Label: 6\n"
5983
+ ]
5984
+ },
5985
+ {
5986
+ "data": {
5987
+ "image/png": "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nG6//Xbt3r2719clf/vtt9q/f79KSkoi2F3k1dTU6Ny5cyooKIh0K0P25JNPqqKiQhs2bNDGjRv7rB8p58LljsNALJ4LUfUe0q233qqioiKtXLlSgUBAmZmZ2rlzp9555x299tprGj16dKRbDJvS0lJdddVVuvbaazVhwgR99dVXqq6u1unTp7Vt27ZItxcyb7/9ts6ePdvzB+bIkSOqqamRJN12220aN26cKisrNW/ePC1ZskRr167t+TDkhAkT9Oijj0ay/WFzuePQ1NSk0tJSrVixQpmZmXIcR/X19dq6datycnL04IMPRrL9IauurlZ5ebkWLVqkxYsX97nsdPGPbKyfC4M5DidPnoyecyGin4IKQltbm/vQQw+56enp7pgxY9zc3Fx3586dkW4r7Kqqqtz8/HzX5/O5o0ePdidOnOgWFxe7H330UaRbC6lp06a5kvod33zzTc92H3/8sXvjjTe648aNc5OTk92lS5e6x44di1zjw+xyx6GlpcUtLi52p0+f7iYkJLhjxoxxs7Ky3LKyMvf777+PdPtDdsMNNwz4+//0z1osnwuDOQ7RdC7wfUgAABOi6j0kAEDsIpAAACYQSAAAEwgkAIAJBBIAwAQCCQBgAoEEADCBQAIAmEAgAQBMIJAAACYQSAAAEwgkAIAJ/w8caFvydw4z2gAAAABJRU5ErkJggg==",
5988
+ "text/plain": [
5989
+ "<Figure size 640x480 with 1 Axes>"
5990
+ ]
5991
+ },
5992
+ "metadata": {},
5993
+ "output_type": "display_data"
5994
+ },
5995
+ {
5996
+ "name": "stdout",
5997
+ "output_type": "stream",
5998
+ "text": [
5999
+ "Prediction: [4]\n",
6000
+ "Label: 4\n"
6001
+ ]
6002
+ },
6003
+ {
6004
+ "data": {
6005
+ "image/png": "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",
6006
+ "text/plain": [
6007
+ "<Figure size 640x480 with 1 Axes>"
6008
+ ]
6009
+ },
6010
+ "metadata": {},
6011
+ "output_type": "display_data"
6012
+ },
6013
+ {
6014
+ "name": "stdout",
6015
+ "output_type": "stream",
6016
+ "text": [
6017
+ "Prediction: [3]\n",
6018
+ "Label: 8\n"
6019
+ ]
6020
+ },
6021
+ {
6022
+ "data": {
6023
+ "image/png": "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unXd1o2kc6G/49Afa+eCnU4GID8/X2fOnNGbb77Zbfkrr7yipKQkXXPNNSHqzIampiZVVVUpKysrYv5HcysqKkpLlizRrl27un1d8smTJ7Vv3z4VFBSEsLvQq6ys1NmzZ5WTkxPqVgZt48aNKikp0fr167Vhw4Ye60fKuXCx49AXi+dCWL2HdMsttygvL08PPPCA/H6/0tLStGPHDr3zzjt69dVXNXr06FC3OGwKCwt1xRVX6Oqrr9aECRP09ddfq7y8XKdPn9bLL78c6vaCZu/evWppaen6A/P555+rsrJSknTrrbdq3LhxKi0t1bx587R48WKtWbOm68OQEyZM0KOPPhrK9ofMxY5DfX29CgsLdeeddyotLU0ej0c1NTXasmWL0tPTdf/994ey/UErLy9XcXGxFi1apNtuu63HbacLf2Qj/VwYyHE4ceJE+JwLIf0UVACam5udhx56yJk8ebIzZswYJyMjw9mxY0eo2xp2ZWVlTlZWluP1ep3Ro0c7EydOdPLz851//etfoW4tqFJTUx1JvY5jx451bffvf//bueGGG5xx48Y58fHxzrJly5zDhw+HrvEhdrHj0NjY6OTn5ztTp051YmJinDFjxjjTp093ioqKnO+//z7U7Q/a9ddf3+fv/9M/a5F8LgzkOITTucD3IQEATAir95AAAJGLQAIAmEAgAQBMIJAAACYQSAAAEwgkAIAJBBIAwAQCCQBgAoEEADCBQAIAmEAgAQBMIJAAACb8P/orjD03AKHpAAAAAElFTkSuQmCC",
6024
+ "text/plain": [
6025
+ "<Figure size 640x480 with 1 Axes>"
6026
+ ]
6027
+ },
6028
+ "metadata": {},
6029
+ "output_type": "display_data"
6030
+ }
6031
+ ],
6032
+ "source": [
6033
+ "test_prediction(0, W1, b1, W2, b2)\n",
6034
+ "test_prediction(1, W1, b1, W2, b2)\n",
6035
+ "test_prediction(2, W1, b1, W2, b2)\n",
6036
+ "test_prediction(3, W1, b1, W2, b2)"
6037
+ ]
6038
+ },
6039
+ {
6040
+ "cell_type": "code",
6041
+ "execution_count": 31,
6042
+ "id": "fdb878e1-cd7c-48c8-bbab-2407dcc41eab",
6043
+ "metadata": {},
6044
+ "outputs": [],
6045
+ "source": [
6046
+ "import numpy as np\n",
6047
+ "from PIL import Image\n",
6048
+ "\n",
6049
+ "def preprocess_image(image_path, target_size=(28, 28)):\n",
6050
+ " try:\n",
6051
+ " # Load the image\n",
6052
+ " img = Image.open(image_path)\n",
6053
+ " \n",
6054
+ " # Convert to RGB if the image has an alpha channel (PNG)\n",
6055
+ " if img.mode == 'RGBA':\n",
6056
+ " img = img.convert('RGB')\n",
6057
+ " \n",
6058
+ " # Convert to grayscale\n",
6059
+ " img = img.convert('L')\n",
6060
+ " \n",
6061
+ " # Resize the image\n",
6062
+ " img = img.resize(target_size)\n",
6063
+ " \n",
6064
+ " # Convert to numpy array and normalize\n",
6065
+ " img_array = np.array(img).reshape(1, 28*28) / 255.0\n",
6066
+ " \n",
6067
+ " return img_array.T # Transpose to match the shape (784, 1)\n",
6068
+ " \n",
6069
+ " except Exception as e:\n",
6070
+ " print(f\"Error processing image {image_path}: {str(e)}\")\n",
6071
+ " return None\n",
6072
+ " return img_array.T # Transpose to match the shape (784, 1)"
6073
+ ]
6074
+ },
6075
+ {
6076
+ "cell_type": "code",
6077
+ "execution_count": 32,
6078
+ "id": "723d31e8-33dd-438b-8b6a-21d3cde7eace",
6079
+ "metadata": {},
6080
+ "outputs": [],
6081
+ "source": [
6082
+ "def predict_custom_image(image_path, W1, b1, W2, b2):\n",
6083
+ " # Preprocess the image\n",
6084
+ " X = preprocess_image(image_path)\n",
6085
+ " \n",
6086
+ " # Forward propagation\n",
6087
+ " _, _, _, A2 = forward_prop(W1, b1, W2, b2, X)\n",
6088
+ " \n",
6089
+ " # Get the prediction\n",
6090
+ " prediction = get_predictions(A2)\n",
6091
+ " \n",
6092
+ " return prediction[0] # Return the single prediction"
6093
+ ]
6094
+ },
6095
+ {
6096
+ "cell_type": "code",
6097
+ "execution_count": 35,
6098
+ "id": "a9aa8b02-edd4-477f-a74e-8b63c77eb51e",
6099
+ "metadata": {},
6100
+ "outputs": [
6101
+ {
6102
+ "name": "stdout",
6103
+ "output_type": "stream",
6104
+ "text": [
6105
+ "The predicted digit is: 6\n"
6106
+ ]
6107
+ }
6108
+ ],
6109
+ "source": [
6110
+ "# Assuming you have already trained your model and have W1, b1, W2, b2\n",
6111
+ "\n",
6112
+ "# Path to your custom image\n",
6113
+ "custom_image_path = \"images.png\"\n",
6114
+ "\n",
6115
+ "# Make prediction\n",
6116
+ "predicted_digit = predict_custom_image(custom_image_path, W1, b1, W2, b2)\n",
6117
+ "\n",
6118
+ "print(f\"The predicted digit is: {predicted_digit}\")"
6119
+ ]
6120
+ },
6121
+ {
6122
+ "cell_type": "code",
6123
+ "execution_count": 36,
6124
+ "id": "2e02ae63-cdff-4b57-ab45-4906693645eb",
6125
+ "metadata": {},
6126
+ "outputs": [],
6127
+ "source": [
6128
+ "import pickle\n",
6129
+ "\n",
6130
+ "model_params = {\n",
6131
+ " 'W1': W1,\n",
6132
+ " 'b1': b1,\n",
6133
+ " 'W2': W2,\n",
6134
+ " 'b2': b2\n",
6135
+ "}\n",
6136
+ "\n",
6137
+ "with open('model.pkl', 'wb') as f:\n",
6138
+ " pickle.dump(model_params, f)"
6139
+ ]
6140
+ },
6141
+ {
6142
+ "cell_type": "code",
6143
+ "execution_count": null,
6144
+ "id": "f5b72124-7465-46ee-8bc7-72e2ab756b1b",
6145
+ "metadata": {},
6146
+ "outputs": [],
6147
  "source": []
6148
  },
6149
  {
6150
  "cell_type": "code",
6151
  "execution_count": null,
6152
+ "id": "e50817d2-c0a4-4564-8afc-c570526ab8fa",
6153
  "metadata": {},
6154
  "outputs": [],
6155
  "source": []