{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":3004,"databundleVersionId":861823,"sourceType":"competition"},{"sourceId":12194370,"sourceType":"datasetVersion","datasetId":7681212}],"dockerImageVersionId":31040,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom matplotlib import pyplot as plt\ndata=pd.read_csv('/kaggle/input/digit-recognizer/train.csv') #/kaggle/input/traininginging/trainining.csv","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-07-23T16:14:02.113896Z","iopub.execute_input":"2025-07-23T16:14:02.114199Z","iopub.status.idle":"2025-07-23T16:14:04.408932Z","shell.execute_reply.started":"2025-07-23T16:14:02.114178Z","shell.execute_reply":"2025-07-23T16:14:04.408197Z"}},"outputs":[],"execution_count":18},{"cell_type":"code","source":"data=np.array(data) #for converting pandas to numpy\nm,n = data.shape #m stores rows,n stores columns\nnp.random.shuffle(data) #shuffles rows of dataset randomly before splicing into dev(validation) and training sets\ndata_dev=data[0:1000].T #takes first 1000 examples for dev(validation) and transposes it (now shape is 785,1000)\nY_dev=data_dev[0] #for extracting labels for devset(shape is (1000,))\nX_dev=data_dev[1:n] #extracts all pixels\nX_dev=X_dev/255 # converges the value to [0,1]\n\ndata_train=data[1000:m].T # takes other cases for training\nY_train=data_dev[0] #again extracting labels(but shape is now (1000-m,))\nX_train=data_dev[1:n] #extracts all pixels\nX_train=X_train/255 #converges again\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-23T16:14:04.410631Z","iopub.execute_input":"2025-07-23T16:14:04.410952Z","iopub.status.idle":"2025-07-23T16:14:05.072473Z","shell.execute_reply.started":"2025-07-23T16:14:04.41093Z","shell.execute_reply":"2025-07-23T16:14:05.071494Z"}},"outputs":[],"execution_count":19},{"cell_type":"code","source":"def initialise_parameters():\n    weight1 = np.random.rand(128, 784)* np.sqrt(2 / 784)\n    bias1=np.random.rand(128,1)-0.5\n    weight2 = np.random.rand(10, 128)* np.sqrt(2 / 784)\n    bias2=np.random.rand(10,1)-0.5\n    return weight1,bias1,weight2,bias2\n\ndef ReLU(Z):\n    return np.maximum(Z,0)\n\n\ndef softmax(Z):\n    A = np.exp(Z) / sum(np.exp(Z))\n    return A\n\ndef derivative_ReLU(Z):\n    return Z>0\n\ndef hotencoding(Y):\n    hot_enc=np.zeros((Y.size,Y.max()+1))\n    hot_enc[np.arange(Y.size),Y]=1\n    hot_enc=hot_enc.T\n    return hot_enc\n\ndef forward_propogation(weight1,bias1,weight2,bias2,X):\n    Z1=weight1.dot(X)+bias1\n    A1=ReLU(Z1)\n    Z2=weight2.dot(A1)+bias2\n    A2=softmax(Z2)\n    return Z1, A1, Z2,A2\n\ndef backward_propogation(Z1,A1,Z2,A2,weight1,weight2,X,Y):\n    one_hot2=hotencoding(Y) #to calculate gradient loss \n    dZ2=(A2-one_hot2)\n    dW2=1/m*dZ2.dot(A1.T)\n    db2=1/m*np.sum(dZ2)\n    dZ1=weight2.T.dot(dZ2)*derivative_ReLU(Z1)\n    dW1=1/m*dZ1.dot(X.T)\n    db1=1/m*np.sum(dZ1)\n    return dW1,db1,dW2,db2\n\ndef update_parameters(weight1,bias1,weight2,bias2,dW1,db1,dW2,db2,alpha):\n    weight1=weight1-alpha*dW1\n    bias1=bias1-alpha*db1    \n    weight2=weight2-alpha*dW2  \n    bias2=bias2-alpha*db2    \n    return weight1,bias1,weight2,bias2\n\ndef predict(A2):\n    return np.argmax(A2,0)\ndef get_accuracy(predictions, Y):\n    return np.sum(predictions == Y) / Y.size\ndef gradient_descent(X,Y,alpha,iterations):\n    weight1,bias1,weight2,bias2=initialise_parameters()\n    for i in range(iterations):\n        Z1,A1,Z2,A2=forward_propogation(weight1,bias1,weight2,bias2,X)\n        dW1,db1,dW2,db2=backward_propogation(Z1,A1,Z2,A2,weight1,weight2,X,Y)\n        weight1,bias1,weight2,bias2=update_parameters(weight1,bias1,weight2,bias2,dW1,db1,dW2,db2,alpha)\n        if i % 10 == 0:\n            print(\"Iteration: \", i)\n            predictions = predict(A2)\n            print(get_accuracy(predictions, Y))\n    return weight1,bias1,weight2,bias2\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-23T16:14:05.073532Z","iopub.execute_input":"2025-07-23T16:14:05.073826Z","iopub.status.idle":"2025-07-23T16:14:05.086953Z","shell.execute_reply.started":"2025-07-23T16:14:05.073799Z","shell.execute_reply":"2025-07-23T16:14:05.085805Z"}},"outputs":[],"execution_count":20},{"cell_type":"code","source":"def make_predictions(X, weight1, bias1, weight2, bias2):\n    _, _, _, A2 = forward_propogation(weight1, bias1, weight2, bias2, X)\n    predictions = predict(A2)\n    return predictions\n\ndef test_prediction(index, weight1, bias1, weight2, bias2):\n    current_image = X_train[:, index, None]\n    prediction = make_predictions(X_train[:, index, None], weight1, bias1, weight2, bias2)\n    label = Y_train[index]\n    print(\"Prediction: \", prediction)\n    print(\"Label: \", label)\n    \n    current_image = current_image.reshape((28, 28)) * 255\n    plt.gray()\n    plt.imshow(current_image, interpolation='nearest')\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-23T16:14:05.088043Z","iopub.execute_input":"2025-07-23T16:14:05.088408Z","iopub.status.idle":"2025-07-23T16:14:05.112813Z","shell.execute_reply.started":"2025-07-23T16:14:05.088376Z","shell.execute_reply":"2025-07-23T16:14:05.111711Z"}},"outputs":[],"execution_count":21},{"cell_type":"code","source":"weight1, bias1, weight2, bias2 = gradient_descent(X_train, Y_train, 0.05, 5000)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-23T16:14:05.115008Z","iopub.execute_input":"2025-07-23T16:14:05.115345Z","iopub.status.idle":"2025-07-23T16:14:55.270255Z","shell.execute_reply.started":"2025-07-23T16:14:05.11532Z","shell.execute_reply":"2025-07-23T16:14:55.269211Z"}},"outputs":[{"name":"stdout","text":"Iteration:  0\n0.095\nIteration:  10\n0.104\nIteration:  20\n0.109\nIteration:  30\n0.115\nIteration:  40\n0.116\nIteration:  50\n0.117\nIteration:  60\n0.121\nIteration:  70\n0.124\nIteration:  80\n0.126\nIteration:  90\n0.126\nIteration:  100\n0.128\nIteration:  110\n0.133\nIteration:  120\n0.134\nIteration:  130\n0.137\nIteration:  140\n0.138\nIteration:  150\n0.141\nIteration:  160\n0.143\nIteration:  170\n0.144\nIteration:  180\n0.146\nIteration:  190\n0.147\nIteration:  200\n0.148\nIteration:  210\n0.151\nIteration:  220\n0.153\nIteration:  230\n0.154\nIteration:  240\n0.155\nIteration:  250\n0.155\nIteration:  260\n0.156\nIteration:  270\n0.157\nIteration:  280\n0.161\nIteration:  290\n0.163\nIteration:  300\n0.164\nIteration:  310\n0.166\nIteration:  320\n0.168\nIteration:  330\n0.17\nIteration:  340\n0.171\nIteration:  350\n0.171\nIteration:  360\n0.174\nIteration:  370\n0.175\nIteration:  380\n0.176\nIteration:  390\n0.177\nIteration:  400\n0.178\nIteration:  410\n0.178\nIteration:  420\n0.18\nIteration:  430\n0.18\nIteration:  440\n0.181\nIteration:  450\n0.183\nIteration:  460\n0.183\nIteration:  470\n0.184\nIteration:  480\n0.185\nIteration:  490\n0.185\nIteration:  500\n0.187\nIteration:  510\n0.187\nIteration:  520\n0.187\nIteration:  530\n0.187\nIteration:  540\n0.189\nIteration:  550\n0.19\nIteration:  560\n0.19\nIteration:  570\n0.19\nIteration:  580\n0.191\nIteration:  590\n0.196\nIteration:  600\n0.199\nIteration:  610\n0.202\nIteration:  620\n0.205\nIteration:  630\n0.205\nIteration:  640\n0.208\nIteration:  650\n0.212\nIteration:  660\n0.213\nIteration:  670\n0.213\nIteration:  680\n0.213\nIteration:  690\n0.212\nIteration:  700\n0.213\nIteration:  710\n0.215\nIteration:  720\n0.218\nIteration:  730\n0.219\nIteration:  740\n0.222\nIteration:  750\n0.225\nIteration:  760\n0.225\nIteration:  770\n0.228\nIteration:  780\n0.231\nIteration:  790\n0.232\nIteration:  800\n0.235\nIteration:  810\n0.241\nIteration:  820\n0.243\nIteration:  830\n0.245\nIteration:  840\n0.247\nIteration:  850\n0.248\nIteration:  860\n0.248\nIteration:  870\n0.249\nIteration:  880\n0.252\nIteration:  890\n0.254\nIteration:  900\n0.258\nIteration:  910\n0.261\nIteration:  920\n0.266\nIteration:  930\n0.267\nIteration:  940\n0.268\nIteration:  950\n0.272\nIteration:  960\n0.274\nIteration:  970\n0.276\nIteration:  980\n0.28\nIteration:  990\n0.282\nIteration:  1000\n0.286\nIteration:  1010\n0.289\nIteration:  1020\n0.29\nIteration:  1030\n0.293\nIteration:  1040\n0.296\nIteration:  1050\n0.296\nIteration:  1060\n0.297\nIteration:  1070\n0.298\nIteration:  1080\n0.298\nIteration:  1090\n0.299\nIteration:  1100\n0.299\nIteration:  1110\n0.304\nIteration:  1120\n0.305\nIteration:  1130\n0.309\nIteration:  1140\n0.314\nIteration:  1150\n0.316\nIteration:  1160\n0.319\nIteration:  1170\n0.32\nIteration:  1180\n0.324\nIteration:  1190\n0.326\nIteration:  1200\n0.327\nIteration:  1210\n0.334\nIteration:  1220\n0.336\nIteration:  1230\n0.34\nIteration:  1240\n0.343\nIteration:  1250\n0.344\nIteration:  1260\n0.349\nIteration:  1270\n0.357\nIteration:  1280\n0.36\nIteration:  1290\n0.363\nIteration:  1300\n0.367\nIteration:  1310\n0.376\nIteration:  1320\n0.38\nIteration:  1330\n0.387\nIteration:  1340\n0.393\nIteration:  1350\n0.4\nIteration:  1360\n0.407\nIteration:  1370\n0.409\nIteration:  1380\n0.413\nIteration:  1390\n0.419\nIteration:  1400\n0.423\nIteration:  1410\n0.427\nIteration:  1420\n0.433\nIteration:  1430\n0.435\nIteration:  1440\n0.437\nIteration:  1450\n0.441\nIteration:  1460\n0.446\nIteration:  1470\n0.447\nIteration:  1480\n0.45\nIteration:  1490\n0.455\nIteration:  1500\n0.458\nIteration:  1510\n0.458\nIteration:  1520\n0.464\nIteration:  1530\n0.466\nIteration:  1540\n0.47\nIteration:  1550\n0.475\nIteration:  1560\n0.479\nIteration:  1570\n0.483\nIteration:  1580\n0.484\nIteration:  1590\n0.491\nIteration:  1600\n0.492\nIteration:  1610\n0.494\nIteration:  1620\n0.499\nIteration:  1630\n0.499\nIteration:  1640\n0.5\nIteration:  1650\n0.5\nIteration:  1660\n0.503\nIteration:  1670\n0.506\nIteration:  1680\n0.507\nIteration:  1690\n0.509\nIteration:  1700\n0.513\nIteration:  1710\n0.514\nIteration:  1720\n0.516\nIteration:  1730\n0.517\nIteration:  1740\n0.517\nIteration:  1750\n0.519\nIteration:  1760\n0.522\nIteration:  1770\n0.522\nIteration:  1780\n0.521\nIteration:  1790\n0.52\nIteration:  1800\n0.521\nIteration:  1810\n0.521\nIteration:  1820\n0.523\nIteration:  1830\n0.526\nIteration:  1840\n0.533\nIteration:  1850\n0.536\nIteration:  1860\n0.539\nIteration:  1870\n0.539\nIteration:  1880\n0.541\nIteration:  1890\n0.54\nIteration:  1900\n0.542\nIteration:  1910\n0.542\nIteration:  1920\n0.543\nIteration:  1930\n0.542\nIteration:  1940\n0.542\nIteration:  1950\n0.544\nIteration:  1960\n0.545\nIteration:  1970\n0.545\nIteration:  1980\n0.546\nIteration:  1990\n0.545\nIteration:  2000\n0.547\nIteration:  2010\n0.547\nIteration:  2020\n0.548\nIteration:  2030\n0.548\nIteration:  2040\n0.549\nIteration:  2050\n0.55\nIteration:  2060\n0.552\nIteration:  2070\n0.554\nIteration:  2080\n0.554\nIteration:  2090\n0.554\nIteration:  2100\n0.557\nIteration:  2110\n0.558\nIteration:  2120\n0.559\nIteration:  2130\n0.561\nIteration:  2140\n0.562\nIteration:  2150\n0.562\nIteration:  2160\n0.562\nIteration:  2170\n0.563\nIteration:  2180\n0.563\nIteration:  2190\n0.563\nIteration:  2200\n0.564\nIteration:  2210\n0.566\nIteration:  2220\n0.565\nIteration:  2230\n0.566\nIteration:  2240\n0.567\nIteration:  2250\n0.569\nIteration:  2260\n0.57\nIteration:  2270\n0.571\nIteration:  2280\n0.572\nIteration:  2290\n0.573\nIteration:  2300\n0.573\nIteration:  2310\n0.575\nIteration:  2320\n0.576\nIteration:  2330\n0.58\nIteration:  2340\n0.581\nIteration:  2350\n0.581\nIteration:  2360\n0.582\nIteration:  2370\n0.584\nIteration:  2380\n0.583\nIteration:  2390\n0.584\nIteration:  2400\n0.589\nIteration:  2410\n0.591\nIteration:  2420\n0.593\nIteration:  2430\n0.594\nIteration:  2440\n0.594\nIteration:  2450\n0.593\nIteration:  2460\n0.594\nIteration:  2470\n0.594\nIteration:  2480\n0.594\nIteration:  2490\n0.593\nIteration:  2500\n0.591\nIteration:  2510\n0.592\nIteration:  2520\n0.593\nIteration:  2530\n0.593\nIteration:  2540\n0.594\nIteration:  2550\n0.594\nIteration:  2560\n0.596\nIteration:  2570\n0.597\nIteration:  2580\n0.598\nIteration:  2590\n0.598\nIteration:  2600\n0.598\nIteration:  2610\n0.601\nIteration:  2620\n0.603\nIteration:  2630\n0.603\nIteration:  2640\n0.603\nIteration:  2650\n0.604\nIteration:  2660\n0.605\nIteration:  2670\n0.609\nIteration:  2680\n0.61\nIteration:  2690\n0.608\nIteration:  2700\n0.609\nIteration:  2710\n0.609\nIteration:  2720\n0.611\nIteration:  2730\n0.611\nIteration:  2740\n0.612\nIteration:  2750\n0.614\nIteration:  2760\n0.616\nIteration:  2770\n0.617\nIteration:  2780\n0.617\nIteration:  2790\n0.617\nIteration:  2800\n0.618\nIteration:  2810\n0.619\nIteration:  2820\n0.619\nIteration:  2830\n0.62\nIteration:  2840\n0.619\nIteration:  2850\n0.621\nIteration:  2860\n0.623\nIteration:  2870\n0.624\nIteration:  2880\n0.624\nIteration:  2890\n0.626\nIteration:  2900\n0.625\nIteration:  2910\n0.625\nIteration:  2920\n0.627\nIteration:  2930\n0.627\nIteration:  2940\n0.628\nIteration:  2950\n0.628\nIteration:  2960\n0.629\nIteration:  2970\n0.629\nIteration:  2980\n0.631\nIteration:  2990\n0.633\nIteration:  3000\n0.636\nIteration:  3010\n0.638\nIteration:  3020\n0.639\nIteration:  3030\n0.639\nIteration:  3040\n0.639\nIteration:  3050\n0.64\nIteration:  3060\n0.64\nIteration:  3070\n0.64\nIteration:  3080\n0.64\nIteration:  3090\n0.64\nIteration:  3100\n0.642\nIteration:  3110\n0.642\nIteration:  3120\n0.643\nIteration:  3130\n0.642\nIteration:  3140\n0.642\nIteration:  3150\n0.642\nIteration:  3160\n0.641\nIteration:  3170\n0.643\nIteration:  3180\n0.645\nIteration:  3190\n0.648\nIteration:  3200\n0.648\nIteration:  3210\n0.651\nIteration:  3220\n0.651\nIteration:  3230\n0.652\nIteration:  3240\n0.653\nIteration:  3250\n0.654\nIteration:  3260\n0.654\nIteration:  3270\n0.656\nIteration:  3280\n0.656\nIteration:  3290\n0.658\nIteration:  3300\n0.658\nIteration:  3310\n0.658\nIteration:  3320\n0.658\nIteration:  3330\n0.659\nIteration:  3340\n0.658\nIteration:  3350\n0.658\nIteration:  3360\n0.66\nIteration:  3370\n0.661\nIteration:  3380\n0.661\nIteration:  3390\n0.66\nIteration:  3400\n0.659\nIteration:  3410\n0.659\nIteration:  3420\n0.659\nIteration:  3430\n0.66\nIteration:  3440\n0.66\nIteration:  3450\n0.663\nIteration:  3460\n0.663\nIteration:  3470\n0.663\nIteration:  3480\n0.664\nIteration:  3490\n0.664\nIteration:  3500\n0.665\nIteration:  3510\n0.666\nIteration:  3520\n0.667\nIteration:  3530\n0.669\nIteration:  3540\n0.669\nIteration:  3550\n0.67\nIteration:  3560\n0.67\nIteration:  3570\n0.671\nIteration:  3580\n0.671\nIteration:  3590\n0.672\nIteration:  3600\n0.672\nIteration:  3610\n0.673\nIteration:  3620\n0.673\nIteration:  3630\n0.673\nIteration:  3640\n0.673\nIteration:  3650\n0.673\nIteration:  3660\n0.678\nIteration:  3670\n0.68\nIteration:  3680\n0.681\nIteration:  3690\n0.684\nIteration:  3700\n0.685\nIteration:  3710\n0.686\nIteration:  3720\n0.686\nIteration:  3730\n0.688\nIteration:  3740\n0.688\nIteration:  3750\n0.689\nIteration:  3760\n0.689\nIteration:  3770\n0.69\nIteration:  3780\n0.691\nIteration:  3790\n0.691\nIteration:  3800\n0.693\nIteration:  3810\n0.693\nIteration:  3820\n0.696\nIteration:  3830\n0.696\nIteration:  3840\n0.697\nIteration:  3850\n0.698\nIteration:  3860\n0.699\nIteration:  3870\n0.699\nIteration:  3880\n0.699\nIteration:  3890\n0.7\nIteration:  3900\n0.701\nIteration:  3910\n0.702\nIteration:  3920\n0.701\nIteration:  3930\n0.703\nIteration:  3940\n0.704\nIteration:  3950\n0.704\nIteration:  3960\n0.705\nIteration:  3970\n0.705\nIteration:  3980\n0.708\nIteration:  3990\n0.71\nIteration:  4000\n0.71\nIteration:  4010\n0.711\nIteration:  4020\n0.711\nIteration:  4030\n0.711\nIteration:  4040\n0.71\nIteration:  4050\n0.711\nIteration:  4060\n0.712\nIteration:  4070\n0.713\nIteration:  4080\n0.712\nIteration:  4090\n0.713\nIteration:  4100\n0.712\nIteration:  4110\n0.712\nIteration:  4120\n0.712\nIteration:  4130\n0.713\nIteration:  4140\n0.714\nIteration:  4150\n0.714\nIteration:  4160\n0.715\nIteration:  4170\n0.716\nIteration:  4180\n0.716\nIteration:  4190\n0.716\nIteration:  4200\n0.716\nIteration:  4210\n0.715\nIteration:  4220\n0.717\nIteration:  4230\n0.717\nIteration:  4240\n0.718\nIteration:  4250\n0.718\nIteration:  4260\n0.72\nIteration:  4270\n0.72\nIteration:  4280\n0.722\nIteration:  4290\n0.722\nIteration:  4300\n0.723\nIteration:  4310\n0.724\nIteration:  4320\n0.725\nIteration:  4330\n0.728\nIteration:  4340\n0.728\nIteration:  4350\n0.729\nIteration:  4360\n0.73\nIteration:  4370\n0.73\nIteration:  4380\n0.731\nIteration:  4390\n0.732\nIteration:  4400\n0.732\nIteration:  4410\n0.733\nIteration:  4420\n0.734\nIteration:  4430\n0.734\nIteration:  4440\n0.734\nIteration:  4450\n0.734\nIteration:  4460\n0.735\nIteration:  4470\n0.736\nIteration:  4480\n0.736\nIteration:  4490\n0.735\nIteration:  4500\n0.735\nIteration:  4510\n0.735\nIteration:  4520\n0.735\nIteration:  4530\n0.735\nIteration:  4540\n0.735\nIteration:  4550\n0.735\nIteration:  4560\n0.735\nIteration:  4570\n0.736\nIteration:  4580\n0.737\nIteration:  4590\n0.738\nIteration:  4600\n0.738\nIteration:  4610\n0.739\nIteration:  4620\n0.739\nIteration:  4630\n0.741\nIteration:  4640\n0.741\nIteration:  4650\n0.741\nIteration:  4660\n0.743\nIteration:  4670\n0.744\nIteration:  4680\n0.745\nIteration:  4690\n0.745\nIteration:  4700\n0.745\nIteration:  4710\n0.745\nIteration:  4720\n0.746\nIteration:  4730\n0.747\nIteration:  4740\n0.747\nIteration:  4750\n0.747\nIteration:  4760\n0.747\nIteration:  4770\n0.747\nIteration:  4780\n0.747\nIteration:  4790\n0.747\nIteration:  4800\n0.748\nIteration:  4810\n0.749\nIteration:  4820\n0.75\nIteration:  4830\n0.752\nIteration:  4840\n0.754\nIteration:  4850\n0.754\nIteration:  4860\n0.755\nIteration:  4870\n0.755\nIteration:  4880\n0.755\nIteration:  4890\n0.756\nIteration:  4900\n0.756\nIteration:  4910\n0.756\nIteration:  4920\n0.755\nIteration:  4930\n0.756\nIteration:  4940\n0.756\nIteration:  4950\n0.756\nIteration:  4960\n0.756\nIteration:  4970\n0.756\nIteration:  4980\n0.756\nIteration:  4990\n0.758\n","output_type":"stream"}],"execution_count":22},{"cell_type":"code","source":"test_prediction(8, weight1, bias1, weight2, bias2)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-23T16:14:55.271386Z","iopub.execute_input":"2025-07-23T16:14:55.271646Z","iopub.status.idle":"2025-07-23T16:14:55.416438Z","shell.execute_reply.started":"2025-07-23T16:14:55.271628Z","shell.execute_reply":"2025-07-23T16:14:55.415522Z"}},"outputs":[{"name":"stdout","text":"Prediction:  [2]\nLabel:  2\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 640x480 with 1 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAbSUlEQVR4nO3df2yV5f3/8dfhR4+I7elqbU8PvywgsIiwDKVrUKbSUerC+JVNGdtgcxpcMQJTl5opOjXdWLIRDdP9sdCxCQqJQCCmm1Zb4iwYKoS4uYaSbq2BFiXpOaXQ0tHr+wdfz8cjLXgfzuF9Tnk+kivh3Pf97v3m4k5f3D13r+NzzjkBAHCFDbFuAABwdSKAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYGKYdQNf1NfXp2PHjikzM1M+n8+6HQCAR845dXZ2KhQKaciQge9zUi6Ajh07pjFjxli3AQC4TK2trRo9evSA+1PuR3CZmZnWLQAAEuBS38+TFkAbN27UjTfeqGuuuUZFRUV6//33v1QdP3YDgMHhUt/PkxJAr732mtauXat169bpgw8+0PTp01VaWqoTJ04k43QAgHTkkmDmzJmuvLw8+vrcuXMuFAq5ysrKS9aGw2EnicFgMBhpPsLh8EW/3yf8Dujs2bNqaGhQSUlJdNuQIUNUUlKi+vr6C47v6elRJBKJGQCAwS/hAfTpp5/q3Llzys/Pj9men5+vtra2C46vrKxUIBCIDp6AA4Crg/lTcBUVFQqHw9HR2tpq3RIA4ApI+O8B5ebmaujQoWpvb4/Z3t7ermAweMHxfr9ffr8/0W0AAFJcwu+AMjIyNGPGDNXU1ES39fX1qaamRsXFxYk+HQAgTSVlJYS1a9dq+fLluvXWWzVz5kxt2LBBXV1d+vGPf5yM0wEA0lBSAujee+/VJ598oqeeekptbW362te+purq6gseTAAAXL18zjln3cTnRSIRBQIB6zYAAJcpHA4rKytrwP3mT8EBAK5OBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATBBAAwMQw6wYwsB/84Aeea/7yl794rvn73//uuUaSNm/eHFddKnv99dc915w5cyYJnQCDH3dAAAATBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATLAYaQrr6em5IjUlJSWeay6nLpWtWLHCc013d3fiG+nH//73P881P/nJT+I616lTpzzX9Pb2xnUuXL24AwIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGDC55xz1k18XiQSUSAQsG4jbe3evdtzzT333JOETpDOXnzxRc81R44c8Vyzbds2zzWffPKJ5xrYCIfDysrKGnA/d0AAABMEEADARMID6Omnn5bP54sZU6ZMSfRpAABpLikfSHfzzTfrrbfe+r+TDONz7wAAsZKSDMOGDVMwGEzGlwYADBJJeQ/oyJEjCoVCGj9+vJYtW6aWlpYBj+3p6VEkEokZAIDBL+EBVFRUpKqqKlVXV+ull15Sc3Oz7rjjDnV2dvZ7fGVlpQKBQHSMGTMm0S0BAFJQwgOorKxM3/3udzVt2jSVlpbqjTfeUEdHx4DP+1dUVCgcDkdHa2trolsCAKSgpD8dkJ2drUmTJqmpqanf/X6/X36/P9ltAABSTNJ/D+jUqVM6evSoCgoKkn0qAEAaSXgAPfroo6qrq9N//vMfvffee1q0aJGGDh2qpUuXJvpUAIA0lvAfwX388cdaunSpTp48qRtuuEG333679u3bpxtuuCHRpwIApDEWIx1k4ll14nvf+15c52pubvZcE8+ClevXr/dcEwqFPNekury8PM81I0eOTEIniVNdXe25ZtmyZZ5rOjo6PNfg8rEYKQAgJRFAAAATBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADDBYqRAmojnI03iWZxWkq677jrPNatXr47rXF699dZbnmu2bt0a17mqqqriqsN5LEYKAEhJBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATrIYN4ALDhg3zXDNx4kTPNaNGjfJcs3nzZs817e3tnmskqbS01HPNJ598Ete5BiNWwwYApCQCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmWIwUQFqZNWuW55pdu3bFda6DBw96rvnOd77juebMmTOea9IBi5ECAFISAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATBBAAwAQBBAAwQQABAEwQQAAAEyxGCmDQKysri6tuz549nmvuuOMOzzXvvfee55p0wGKkAICURAABAEx4DqC9e/dq/vz5CoVC8vl82rlzZ8x+55yeeuopFRQUaMSIESopKdGRI0cS1S8AYJDwHEBdXV2aPn26Nm7c2O/+9evX64UXXtDLL7+s/fv3a+TIkSotLVV3d/dlNwsAGDyGeS0oKysb8A0955w2bNigX/7yl1qwYIEkafPmzcrPz9fOnTt13333XV63AIBBI6HvATU3N6utrU0lJSXRbYFAQEVFRaqvr++3pqenR5FIJGYAAAa/hAZQW1ubJCk/Pz9me35+fnTfF1VWVioQCETHmDFjEtkSACBFmT8FV1FRoXA4HB2tra3WLQEAroCEBlAwGJQktbe3x2xvb2+P7vsiv9+vrKysmAEAGPwSGkCFhYUKBoOqqamJbotEItq/f7+Ki4sTeSoAQJrz/BTcqVOn1NTUFH3d3NysQ4cOKScnR2PHjtXq1av13HPP6aabblJhYaGefPJJhUIhLVy4MJF9AwDSnOcAOnDggO66667o67Vr10qSli9frqqqKj3++OPq6urSgw8+qI6ODt1+++2qrq7WNddck7iuAQBpj8VIAQx6mzZtiqvuRz/6keeaN954w3PN/PnzPdekAxYjBQCkJAIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACc8fxwAAiRLPJyB/61vf8lxTVlbmuQbJxx0QAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATBBAAwAQBBAAwQQABAEwQQAAAEyxGCsBMYWGh55pt27YloZP+9fb2eq7ZsGFD4hsZpLgDAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYILFSAFc4Nprr/Vcs3TpUs81Tz75pOeaeLS3t8dVt2zZMs8177zzTlznuhpxBwQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBA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KfcjOADA1YEAAgCYSKsA8vv9Wrdunfx+v3UrppiH85iH85iH85iH89JpHlLuIQQAwNUhre6AAACDBwEEADBBAAEATBBAAAATaRNAGzdu1I033qhrrrlGRUVFev/9961buuKefvpp+Xy+mDFlyhTrtpJu7969mj9/vkKhkHw+n3bu3Bmz3zmnp556SgUFBRoxYoRKSkp05MgRm2aT6FLzsGLFiguuj3nz5tk0mySVlZW67bbblJmZqby8PC1cuFCNjY0xx3R3d6u8vFzXX3+9rrvuOi1ZskTt7e1GHSfHl5mHO++884LrYeXKlUYd9y8tAui1117T2rVrtW7dOn3wwQeaPn26SktLdeLECevWrribb75Zx48fj453333XuqWk6+rq0vTp07Vx48Z+969fv14vvPCCXn75Ze3fv18jR45UaWmpuru7r3CnyXWpeZCkefPmxVwfW7duvYIdJl9dXZ3Ky8u1b98+vfnmm+rt7dXcuXPV1dUVPWbNmjXavXu3tm/frrq6Oh07dkyLFy827Drxvsw8SNIDDzwQcz2sX7/eqOMBuDQwc+ZMV15eHn197tw5FwqFXGVlpWFXV966devc9OnTrdswJcnt2LEj+rqvr88Fg0H329/+Nrqto6PD+f1+t3XrVoMOr4wvzoNzzi1fvtwtWLDApB8rJ06ccJJcXV2dc+78v/3w4cPd9u3bo8d89NFHTpKrr6+3ajPpvjgPzjn3zW9+0z3yyCN2TX0JKX8HdPbsWTU0NKikpCS6bciQISopKVF9fb1hZzaOHDmiUCik8ePHa9myZWppabFuyVRzc7Pa2tpiro9AIKCioqKr8vqora1VXl6eJk+erIceekgnT560bimpwuGwJCknJ0eS1NDQoN7e3pjrYcqUKRo7duygvh6+OA+feeWVV5Sbm6upU6eqoqJCp0+ftmhvQCm3GOkXffrppzp37pzy8/Njtufn5+vf//63UVc2ioqKVFVVpcmTJ+v48eN65plndMcdd+jDDz9UZmamdXsm2traJKnf6+OzfVeLefPmafHixSosLNTRo0f1xBNPqKysTPX19Ro6dKh1ewnX19en1atXa9asWZo6daqk89dDRkaGsrOzY44dzNdDf/MgSd///vc1btw4hUIhHT58WL/4xS/U2Nio119/3bDbWCkfQPg/ZWVl0T9PmzZNRUVFGjdunLZt26b777/fsDOkgvvuuy/651tuuUXTpk3ThAkTVFtbqzlz5hh2lhzl5eX68MMPr4r3QS9moHl48MEHo3++5ZZbVFBQoDlz5ujo0aOaMGHClW6zXyn/I7jc3FwNHTr0gqdY2tvbFQwGjbpKDdnZ2Zo0aZKampqsWzHz2TXA9XGh8ePHKzc3d1BeH6tWrdKePXv0zjvvxHx8SzAY1NmzZ9XR0RFz/GC9Hgaah/4UFRVJUkpdDykfQBkZGZoxY4Zqamqi2/r6+lRTU6Pi4mLDzuydOnVKR48eVUFBgXUrZgoLCxUMBmOuj0gkov3791/118fHH3+skydPDqrrwzmnVatWaceOHXr77bdVWFgYs3/GjBkaPnx4zPXQ2NiolpaWQXU9XGoe+nPo0CFJSq3rwfopiC/j1VdfdX6/31VVVbl//etf7sEHH3TZ2dmura3NurUr6uc//7mrra11zc3N7h//+IcrKSlxubm57sSJE9atJVVnZ6c7ePCgO3jwoJPkfve737mDBw+6//73v845537961+77Oxst2vXLnf48GG3YMECV1hY6M6cOWPceWJdbB46Ozvdo48+6urr611zc7N766233Ne//nV30003ue7ubuvWE+ahhx5ygUDA1dbWuuPHj0fH6dOno8esXLnSjR071r399tvuwIEDrri42BUXFxt2nXiXmoempib3q1/9yh04cMA1Nze7Xbt2ufHjx7vZs2cbdx4rLQLIOedefPFFN3bsWJeRkeFmzpzp9u3bZ93SFXfvvfe6goICl5GR4UaNGuXuvfde19TUZN1W0r3zzjtO0gVj+fLlzrnzj2I/+eSTLj8/3/n9fjdnzhzX2Nho23QSXGweTp8+7ebOnetuuOEGN3z4cDdu3Dj3wAMPDLr/pPX395fkNm3aFD3mzJkz7mc/+5n7yle+4q699lq3aNEid/z4cbumk+BS89DS0uJmz57tcnJynN/vdxMnTnSPPfaYC4fDto1/AR/HAAAwkfLvAQEABicCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAm/h9nH+X/8z6RmgAAAABJRU5ErkJggg==\n"},"metadata":{}}],"execution_count":23}]}