{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","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"}],"dockerImageVersionId":30746,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-07-16T06:47:53.622897Z","iopub.execute_input":"2024-07-16T06:47:53.623385Z","iopub.status.idle":"2024-07-16T06:47:55.038692Z","shell.execute_reply.started":"2024-07-16T06:47:53.623336Z","shell.execute_reply":"2024-07-16T06:47:55.037149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Import Libraries","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\nimport pandas as pd","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:31.105956Z","iopub.execute_input":"2024-07-16T07:09:31.106369Z","iopub.status.idle":"2024-07-16T07:09:31.112822Z","shell.execute_reply.started":"2024-07-16T07:09:31.106336Z","shell.execute_reply":"2024-07-16T07:09:31.111201Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest_data =  pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:31.305093Z","iopub.execute_input":"2024-07-16T07:09:31.305517Z","iopub.status.idle":"2024-07-16T07:09:36.595030Z","shell.execute_reply.started":"2024-07-16T07:09:31.305478Z","shell.execute_reply":"2024-07-16T07:09:36.593794Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = np.array(train_data).T\ntest_data = np.array(test_data).T\n\nm,n = train_data.shape\nprint(n)","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:36.597807Z","iopub.execute_input":"2024-07-16T07:09:36.598302Z","iopub.status.idle":"2024-07-16T07:09:36.778280Z","shell.execute_reply.started":"2024-07-16T07:09:36.598259Z","shell.execute_reply":"2024-07-16T07:09:36.776883Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_test = test_data[0]\nX_test = test_data[1:n]\nX_test = X_test / 255.\n\nY_train = train_data[0]\nX_train = train_data[1:n]\nX_train = X_train / 255.\n_, m_train = X_train.shape","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:36.779775Z","iopub.execute_input":"2024-07-16T07:09:36.780141Z","iopub.status.idle":"2024-07-16T07:09:36.976357Z","shell.execute_reply.started":"2024-07-16T07:09:36.780112Z","shell.execute_reply":"2024-07-16T07:09:36.975030Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Forward Pass\n\n![image.png](attachment:d5f028c8-2fd1-480c-a5c9-46020da8f089.png)","metadata":{},"attachments":{"d5f028c8-2fd1-480c-a5c9-46020da8f089.png":{"image/png":"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"}}},{"cell_type":"code","source":"def inparam():\n    W1 = np.random.rand(10, 784) - 0.5\n    b1 = np.random.rand(10, 1) - 0.5\n    W2 = np.random.rand(10, 10) - 0.5\n    b2 = np.random.rand(10, 1) - 0.5\n    return W1, b1, W2, b2","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:36.979084Z","iopub.execute_input":"2024-07-16T07:09:36.979464Z","iopub.status.idle":"2024-07-16T07:09:36.986653Z","shell.execute_reply.started":"2024-07-16T07:09:36.979432Z","shell.execute_reply":"2024-07-16T07:09:36.985291Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def ReLU(z):\n    return np.maximum(z, 0)","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:36.988348Z","iopub.execute_input":"2024-07-16T07:09:36.988832Z","iopub.status.idle":"2024-07-16T07:09:36.998602Z","shell.execute_reply.started":"2024-07-16T07:09:36.988768Z","shell.execute_reply":"2024-07-16T07:09:36.997227Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def ReLU_deriv(Z):\n    return Z > 0","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:37.000183Z","iopub.execute_input":"2024-07-16T07:09:37.000581Z","iopub.status.idle":"2024-07-16T07:09:37.018980Z","shell.execute_reply.started":"2024-07-16T07:09:37.000548Z","shell.execute_reply":"2024-07-16T07:09:37.017321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def softmax(z):\n    a = np.exp(z) / sum(np.exp(z))\n    return a","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:37.021255Z","iopub.execute_input":"2024-07-16T07:09:37.021748Z","iopub.status.idle":"2024-07-16T07:09:37.033154Z","shell.execute_reply.started":"2024-07-16T07:09:37.021705Z","shell.execute_reply":"2024-07-16T07:09:37.031852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def forwardprop(W1, b1, W2, b2, X):\n    Z1 = W1.dot(X) + b1\n    A1 = ReLU(Z1)\n    Z2 = W2.dot(A1) + b2\n    A2 = softmax(Z2)\n    return Z1, A1, Z2, A2","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:37.034845Z","iopub.execute_input":"2024-07-16T07:09:37.035261Z","iopub.status.idle":"2024-07-16T07:09:37.046430Z","shell.execute_reply.started":"2024-07-16T07:09:37.035229Z","shell.execute_reply":"2024-07-16T07:09:37.045145Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def onehotencoding(Y):\n    one_hot_Y = np.zeros((Y.size, Y.max() + 1))\n    one_hot_Y[np.arange(Y.size), Y] = 1\n    one_hot_Y = one_hot_Y.T\n    return one_hot_Y","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:37.048359Z","iopub.execute_input":"2024-07-16T07:09:37.048840Z","iopub.status.idle":"2024-07-16T07:09:37.058980Z","shell.execute_reply.started":"2024-07-16T07:09:37.048762Z","shell.execute_reply":"2024-07-16T07:09:37.057609Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Backpropagation\n\n![image.png](attachment:bdfa1d56-4b67-4e32-bd9c-92f4454d0e88.png)","metadata":{},"attachments":{"bdfa1d56-4b67-4e32-bd9c-92f4454d0e88.png":{"image/png":"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"}}},{"cell_type":"code","source":"def backprop(Z1, A1, Z2, A2, W1, W2, X, Y):\n    one_hot_Y = onehotencoding(Y)\n    dZ2 = A2 - one_hot_Y\n    dW2 = 1 / m * dZ2.dot(A1.T)\n    db2 = 1 / m * np.sum(dZ2)\n    dZ1 = W2.T.dot(dZ2) * ReLU_deriv(Z1)\n    dW1 = 1 / m * dZ1.dot(X.T)\n    db1 = 1 / m * np.sum(dZ1)\n    return dW1, db1, dW2, db2","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:37.063207Z","iopub.execute_input":"2024-07-16T07:09:37.063984Z","iopub.status.idle":"2024-07-16T07:09:37.072214Z","shell.execute_reply.started":"2024-07-16T07:09:37.063947Z","shell.execute_reply":"2024-07-16T07:09:37.070872Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Parameter Update\n\n![image.png](attachment:1294d9eb-facb-4019-b274-c5d887ef07ea.png)","metadata":{},"attachments":{"1294d9eb-facb-4019-b274-c5d887ef07ea.png":{"image/png":"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"}}},{"cell_type":"code","source":"def param_update(W1, b1, W2, b2, dW1, db1, dW2, db2, alpha):\n    W1 = W1 - alpha * dW1\n    b1 = b1 - alpha * db1    \n    W2 = W2 - alpha * dW2  \n    b2 = b2 - alpha * db2    \n    return W1, b1, W2, b2","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:37.073696Z","iopub.execute_input":"2024-07-16T07:09:37.074121Z","iopub.status.idle":"2024-07-16T07:09:37.084935Z","shell.execute_reply.started":"2024-07-16T07:09:37.074083Z","shell.execute_reply":"2024-07-16T07:09:37.083704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_predictions(A2):\n    return np.argmax(A2, 0)\n\ndef get_accuracy(predictions, Y):\n    print(predictions, Y)\n    return np.sum(predictions == Y) / Y.size\n\ndef gradient_descent(X, Y, alpha, iterations):\n    W1, b1, W2, b2 = inparam()\n    for i in range(iterations):\n        Z1, A1, Z2, A2 = forwardprop(W1, b1, W2, b2, X)\n        dW1, db1, dW2, db2 = backprop(Z1, A1, Z2, A2, W1, W2, X, Y)\n        W1, b1, W2, b2 = param_update(W1, b1, W2, b2, dW1, db1, dW2, db2, alpha)\n        if i % 10 == 0:\n            print(\"Iteration - \", i)\n            predictions = get_predictions(A2)\n            print(get_accuracy(predictions, Y))\n    return W1, b1, W2, b2","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:09:37.086509Z","iopub.execute_input":"2024-07-16T07:09:37.086986Z","iopub.status.idle":"2024-07-16T07:09:37.099549Z","shell.execute_reply.started":"2024-07-16T07:09:37.086944Z","shell.execute_reply":"2024-07-16T07:09:37.098244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"W1, b1, W2, b2 = gradient_descent(X_train, Y_train, 0.01, 500)","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:11:47.658364Z","iopub.execute_input":"2024-07-16T07:11:47.659259Z","iopub.status.idle":"2024-07-16T07:12:52.281743Z","shell.execute_reply.started":"2024-07-16T07:11:47.659213Z","shell.execute_reply":"2024-07-16T07:12:52.280088Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def make_predictions(X, W1, b1, W2, b2):\n    _, _, _, A2 = forwardprop(W1, b1, W2, b2, X)\n    predictions = get_predictions(A2)\n    return predictions\n\ndef testpred(index, W1, b1, W2, b2):\n    current_image = X_train[:, index, None]\n    prediction = make_predictions(X_train[:, index, None], W1, b1, W2, b2)\n    label = Y_train[index]\n    print(f\"Prediction : {prediction}   Label: {label}\")\n    current_image = current_image.reshape((28, 28)) * 255\n    plt.gray()\n    plt.imshow(current_image, interpolation='nearest')\n    plt.show()  ","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:13:04.168967Z","iopub.execute_input":"2024-07-16T07:13:04.169887Z","iopub.status.idle":"2024-07-16T07:13:04.178804Z","shell.execute_reply.started":"2024-07-16T07:13:04.169849Z","shell.execute_reply":"2024-07-16T07:13:04.177555Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"testpred(200, W1, b1, W2, b2)\ntestpred(3, W1, b1, W2, b2)","metadata":{"execution":{"iopub.status.busy":"2024-07-16T07:13:05.216736Z","iopub.execute_input":"2024-07-16T07:13:05.217179Z","iopub.status.idle":"2024-07-16T07:13:05.727157Z","shell.execute_reply.started":"2024-07-16T07:13:05.217147Z","shell.execute_reply":"2024-07-16T07:13:05.725989Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}