diff --git a/Vanshika__241141__neural_network_Q1.ipynb b/Vanshika__241141__neural_network_Q1.ipynb new file mode 100644 index 0000000..f11ebd7 --- /dev/null +++ b/Vanshika__241141__neural_network_Q1.ipynb @@ -0,0 +1,1459 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "x6l25t1pO3Uz" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import train_test_split\n" + ] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "id": "DkHdcroXT5gS", + "outputId": "3dbb3bd5-7a72-4ae8-f18b-91d3bb645751" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving Linear_Regression_dataset.csv to Linear_Regression_dataset.csv\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "data_df = pd.read_csv(\"Linear_Regression_dataset.csv\")\n", + "print(\"(No of rows, No of Columns) = \",data_df.shape)\n", + "data_df.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 273 + }, + "id": "4d5EwXMfRnW3", + "outputId": "3017a784-0eaa-4ad1-e98d-1623a3bb65b5" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(No of rows, No of Columns) = (21613, 21)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " id date price bedrooms bathrooms sqft_living \\\n", + "0 7129300520 20141013T000000 221900.0 3 1.00 1180 \n", + "1 6414100192 20141209T000000 538000.0 3 2.25 2570 \n", + "2 5631500400 20150225T000000 180000.0 2 1.00 770 \n", + "3 2487200875 20141209T000000 604000.0 4 3.00 1960 \n", + "4 1954400510 20150218T000000 510000.0 3 2.00 1680 \n", + "\n", + " sqft_lot floors waterfront view ... grade sqft_above sqft_basement \\\n", + "0 5650 1.0 0 0 ... 7 1180 0 \n", + "1 7242 2.0 0 0 ... 7 2170 400 \n", + "2 10000 1.0 0 0 ... 6 770 0 \n", + "3 5000 1.0 0 0 ... 7 1050 910 \n", + "4 8080 1.0 0 0 ... 8 1680 0 \n", + "\n", + " yr_built yr_renovated zipcode lat long sqft_living15 \\\n", + "0 1955 0 98178 47.5112 -122.257 1340 \n", + "1 1951 1991 98125 47.7210 -122.319 1690 \n", + "2 1933 0 98028 47.7379 -122.233 2720 \n", + "3 1965 0 98136 47.5208 -122.393 1360 \n", + "4 1987 0 98074 47.6168 -122.045 1800 \n", + "\n", + " sqft_lot15 \n", + "0 5650 \n", + "1 7639 \n", + "2 8062 \n", + "3 5000 \n", + "4 7503 \n", + "\n", + "[5 rows x 21 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
iddatepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontview...gradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
0712930052020141013T000000221900.031.00118056501.000...711800195509817847.5112-122.25713405650
1641410019220141209T000000538000.032.25257072422.000...72170400195119919812547.7210-122.31916907639
2563150040020150225T000000180000.021.00770100001.000...67700193309802847.7379-122.23327208062
3248720087520141209T000000604000.043.00196050001.000...71050910196509813647.5208-122.39313605000
4195440051020150218T000000510000.032.00168080801.000...816800198709807447.6168-122.04518007503
\n", + "

5 rows × 21 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "data_df" + } + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "data_df['date'] = data_df['date'].str.replace('T000000', '')\n" + ], + "metadata": { + "id": "A-hfNH2QUwdS" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "data_array = data_df.drop(columns=['id','date']).to_numpy()\n", + "assert (data_array.shape == (21613,19))\n", + "data_df.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 256 + }, + "id": "LJQ21tkvW6S7", + "outputId": "4435993b-9068-47b4-8260-86df2bb74bae" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " id date price bedrooms bathrooms sqft_living sqft_lot \\\n", + "0 7129300520 20141013 221900.0 3 1.00 1180 5650 \n", + "1 6414100192 20141209 538000.0 3 2.25 2570 7242 \n", + "2 5631500400 20150225 180000.0 2 1.00 770 10000 \n", + "3 2487200875 20141209 604000.0 4 3.00 1960 5000 \n", + "4 1954400510 20150218 510000.0 3 2.00 1680 8080 \n", + "\n", + " floors waterfront view ... grade sqft_above sqft_basement yr_built \\\n", + "0 1.0 0 0 ... 7 1180 0 1955 \n", + "1 2.0 0 0 ... 7 2170 400 1951 \n", + "2 1.0 0 0 ... 6 770 0 1933 \n", + "3 1.0 0 0 ... 7 1050 910 1965 \n", + "4 1.0 0 0 ... 8 1680 0 1987 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 sqft_lot15 \n", + "0 0 98178 47.5112 -122.257 1340 5650 \n", + "1 1991 98125 47.7210 -122.319 1690 7639 \n", + "2 0 98028 47.7379 -122.233 2720 8062 \n", + "3 0 98136 47.5208 -122.393 1360 5000 \n", + "4 0 98074 47.6168 -122.045 1800 7503 \n", + "\n", + "[5 rows x 21 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
iddatepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontview...gradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
0712930052020141013221900.031.00118056501.000...711800195509817847.5112-122.25713405650
1641410019220141209538000.032.25257072422.000...72170400195119919812547.7210-122.31916907639
2563150040020150225180000.021.00770100001.000...67700193309802847.7379-122.23327208062
3248720087520141209604000.043.00196050001.000...71050910196509813647.5208-122.39313605000
4195440051020150218510000.032.00168080801.000...816800198709807447.6168-122.04518007503
\n", + "

5 rows × 21 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "data_df" + } + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "code", + "source": [ + "mean = np.mean(data_array,axis=0)\n", + "sd = np.std(data_array,axis=0)\n", + "\n", + "data_array_norm = (data_array - mean)/sd\n", + "\n", + "print(data_array_norm.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0_athC9wcaFX", + "outputId": "64a21e85-e94f-4c36-9ae4-1e5a3b167801" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(21613, 19)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "labels= data_df['price'].to_numpy()\n", + "x_array_norm = np.delete(data_array_norm, 0, axis=1)\n", + "x_train, x_test, y_train, y_test = train_test_split(x_array_norm,labels,test_size=0.15,random_state=42,shuffle=True) # splitting data into test and train set.\n", + "\n", + "print(x_train.shape,x_test.shape,y_train.shape,y_test.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "IaV3z-EhhcTO", + "outputId": "7496b403-4c7d-44a3-8be4-17c8493d606d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(18371, 18) (3242, 18) (18371,) (3242,)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "def loss(y_pred,y_true):\n", + " mse =np.mean(y_pred-y_true)**2\n", + "\n", + " return mse" + ], + "metadata": { + "id": "KywUvhg8iDDu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def y(x,a,b):\n", + "\n", + " m,n = x.shape\n", + " y_pred = np.dot(x, a) + b\n", + "\n", + " assert(y_pred.shape == (m,))\n", + " return y_pred" + ], + "metadata": { + "id": "30dgoO0pkusI" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def gradient(x,a,b,y_true):\n", + " m,n = x.shape\n", + " yp = y(x,a,b)\n", + " error = y_true - yp\n", + "\n", + " da = -2/m * np.dot(x.T, error)\n", + " db = -2/m * np.sum(error)\n", + "\n", + " assert(da.shape ==(n,))\n", + " return (da,db)" + ], + "metadata": { + "id": "rTbIOnCqLd9J" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def gradient_descent(x, y_true, learning_rate=0.01, epochs=10):\n", + " m, n = x.shape\n", + " loss_mse = []\n", + "\n", + " a = np.zeros(n)\n", + " b = 0.0\n", + "\n", + " for i in range(epochs):\n", + "\n", + " da, db = gradient(x, a, b, y_true)\n", + " a = a - learning_rate * da\n", + " b = b - learning_rate * db\n", + "\n", + " y_pred = y(x, a, b)\n", + " l_mse = loss(y_pred, y_true)\n", + "\n", + " loss_mse.append(l_mse)\n", + "\n", + " print(\"Epoch\", i + 1, \"Completed! Loss =\", l_mse)\n", + "\n", + " print(\"Training completed!!\")\n", + "\n", + " assert a.shape == (n,)\n", + " return (loss_mse, a, b)\n" + ], + "metadata": { + "id": "noyzrV-XdZea" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "labels= data_df['price'].to_numpy()\n", + "x_array_norm = np.delete(data_array_norm, 0, axis=1)\n", + "x_train, x_test, y_train, y_test = train_test_split(x_array_norm,labels,test_size=0.15,random_state=42,shuffle=True) # splitting data into test and train set.\n", + "\n", + "print(x_train.shape,x_test.shape,y_train.shape,y_test.shape)\n", + "\n", + "epochs = 100\n", + "learn_rate = 0.01\n", + "\n", + "train_loss, a, b = gradient_descent(x_train, y_train, learning_rate=learn_rate, epochs=epochs)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-gluSyh6Osey", + "outputId": "9ffc19f2-aa52-40b1-8797-400407c28e01" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(18371, 18) (3242, 18) (18371,) (3242,)\n", + "Epoch 1 Completed! Loss = 278301740779.34436\n", + "Epoch 2 Completed! Loss = 267323275269.054\n", + "Epoch 3 Completed! Loss = 256775523937.92712\n", + "Epoch 4 Completed! Loss = 246641854544.26868\n", + "Epoch 5 Completed! Loss = 236906246020.03635\n", + "Epoch 6 Completed! Loss = 227553269783.47537\n", + "Epoch 7 Completed! Loss = 218568071137.42526\n", + "Epoch 8 Completed! Loss = 209936350828.36533\n", + "Epoch 9 Completed! Loss = 201644346828.8511\n", + "Epoch 10 Completed! Loss = 193678816395.1971\n", + "Epoch 11 Completed! Loss = 186027018442.90234\n", + "Epoch 12 Completed! Loss = 178676696274.2013\n", + "Epoch 13 Completed! Loss = 171616060685.10782\n", + "Epoch 14 Completed! Loss = 164833773473.26575\n", + "Epoch 15 Completed! Loss = 158318931362.70084\n", + "Epoch 16 Completed! Loss = 152061050357.09088\n", + "Epoch 17 Completed! Loss = 146050050529.32593\n", + "Epoch 18 Completed! Loss = 140276241251.8534\n", + "Epoch 19 Completed! Loss = 134730306869.50908\n", + "Epoch 20 Completed! Loss = 129403292814.16943\n", + "Epoch 21 Completed! Loss = 124286592158.56694\n", + "Epoch 22 Completed! Loss = 119371932604.93565\n", + "Epoch 23 Completed! Loss = 114651363902.76468\n", + "Epoch 24 Completed! Loss = 110117245688.78859\n", + "Epoch 25 Completed! Loss = 105762235741.40605\n", + "Epoch 26 Completed! Loss = 101579278640.96579\n", + "Epoch 27 Completed! Loss = 97561594826.75998\n", + "Epoch 28 Completed! Loss = 93702670041.10696\n", + "Epoch 29 Completed! Loss = 89996245150.56276\n", + "Epoch 30 Completed! Loss = 86436306334.05571\n", + "Epoch 31 Completed! Loss = 83017075627.58545\n", + "Epoch 32 Completed! Loss = 79733001815.04242\n", + "Epoch 33 Completed! Loss = 76578751654.68462\n", + "Epoch 34 Completed! Loss = 73549201430.84021\n", + "Epoch 35 Completed! Loss = 70639428820.48181\n", + "Epoch 36 Completed! Loss = 67844705064.43136\n", + "Epoch 37 Completed! Loss = 65160487433.10048\n", + "Epoch 38 Completed! Loss = 62582411976.84017\n", + "Epoch 39 Completed! Loss = 60106286551.16494\n", + "Epoch 40 Completed! Loss = 57728084107.324\n", + "Epoch 41 Completed! Loss = 55443936238.91123\n", + "Epoch 42 Completed! Loss = 53250126975.43771\n", + "Epoch 43 Completed! Loss = 51143086814.0254\n", + "Epoch 44 Completed! Loss = 49119386980.62512\n", + "Epoch 45 Completed! Loss = 47175733912.40659\n", + "Epoch 46 Completed! Loss = 45308963953.214676\n", + "Epoch 47 Completed! Loss = 43516038254.23415\n", + "Epoch 48 Completed! Loss = 41794037872.25023\n", + "Epoch 49 Completed! Loss = 40140159058.13632\n", + "Epoch 50 Completed! Loss = 38551708728.4409\n", + "Epoch 51 Completed! Loss = 37026100113.18321\n", + "Epoch 52 Completed! Loss = 35560848573.1999\n", + "Epoch 53 Completed! Loss = 34153567580.613575\n", + "Epoch 54 Completed! Loss = 32801964856.2172\n", + "Epoch 55 Completed! Loss = 31503838657.78705\n", + "Epoch 56 Completed! Loss = 30257074213.54888\n", + "Epoch 57 Completed! Loss = 29059640295.22947\n", + "Epoch 58 Completed! Loss = 27909585925.32693\n", + "Epoch 59 Completed! Loss = 26805037213.428257\n", + "Epoch 60 Completed! Loss = 25744194316.592846\n", + "Epoch 61 Completed! Loss = 24725328519.00393\n", + "Epoch 62 Completed! Loss = 23746779426.268562\n", + "Epoch 63 Completed! Loss = 22806952269.918293\n", + "Epoch 64 Completed! Loss = 21904315317.830227\n", + "Epoch 65 Completed! Loss = 21037397386.448677\n", + "Epoch 66 Completed! Loss = 20204785450.843227\n", + "Epoch 67 Completed! Loss = 19405122348.78983\n", + "Epoch 68 Completed! Loss = 18637104575.205948\n", + "Epoch 69 Completed! Loss = 17899480163.41129\n", + "Epoch 70 Completed! Loss = 17191046649.820152\n", + "Epoch 71 Completed! Loss = 16510649118.801943\n", + "Epoch 72 Completed! Loss = 15857178324.571426\n", + "Epoch 73 Completed! Loss = 15229568887.09171\n", + "Epoch 74 Completed! Loss = 14626797559.08861\n", + "Epoch 75 Completed! Loss = 14047881561.387838\n", + "Epoch 76 Completed! Loss = 13491876983.894085\n", + "Epoch 77 Completed! Loss = 12957877249.634987\n", + "Epoch 78 Completed! Loss = 12445011639.39322\n", + "Epoch 79 Completed! Loss = 11952443874.545923\n", + "Epoch 80 Completed! Loss = 11479370755.823639\n", + "Epoch 81 Completed! Loss = 11025020855.789782\n", + "Epoch 82 Completed! Loss = 10588653262.927616\n", + "Epoch 83 Completed! Loss = 10169556375.304\n", + "Epoch 84 Completed! Loss = 9767046741.85872\n", + "Epoch 85 Completed! Loss = 9380467949.444178\n", + "Epoch 86 Completed! Loss = 9009189553.81394\n", + "Epoch 87 Completed! Loss = 8652606052.828821\n", + "Epoch 88 Completed! Loss = 8310135900.217272\n", + "Epoch 89 Completed! Loss = 7981220558.291822\n", + "Epoch 90 Completed! Loss = 7665323588.086127\n", + "Epoch 91 Completed! Loss = 7361929775.437344\n", + "Epoch 92 Completed! Loss = 7070544291.596533\n", + "Epoch 93 Completed! Loss = 6790691887.00536\n", + "Epoch 94 Completed! Loss = 6521916116.930879\n", + "Epoch 95 Completed! Loss = 6263778597.7016735\n", + "Epoch 96 Completed! Loss = 6015858292.337903\n", + "Epoch 97 Completed! Loss = 5777750824.415447\n", + "Epoch 98 Completed! Loss = 5549067819.049739\n", + "Epoch 99 Completed! Loss = 5329436269.929012\n", + "Epoch 100 Completed! Loss = 5118497931.368559\n", + "Training completed!!\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "y_pred_test = y(x_test, a, b)\n", + "test_loss = loss(y_pred_test, y_test)\n", + "\n", + "print(\"Loss on test data =\", test_loss)\n", + "\n", + "plt.plot(train_loss)\n", + "plt.title(\"Training Loss\")\n", + "plt.xlabel(\"Epochs\")\n", + "plt.ylabel(\"Loss (MSE)\")\n", + "plt.grid(True)\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 489 + }, + "id": "Zx-4Rw4UPnA2", + "outputId": "247e5aab-3fd9-46f9-ae0c-98bd2107ad79" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Loss on test data = 6228121125.238866\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/Vanshika__241141__neural_network_part2.ipynb b/Vanshika__241141__neural_network_part2.ipynb new file mode 100644 index 0000000..8ac5cec --- /dev/null +++ b/Vanshika__241141__neural_network_part2.ipynb @@ -0,0 +1,339 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WHb-IJOUSivY" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from tensorflow import keras\n", + "from tensorflow.keras import layers\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "source": [ + "mnist = keras.datasets.mnist\n", + "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", + "print(\"No. of training examples = \",x_train.shape[0])\n", + "print(\"Size of each image in dataset = \",x_train.shape[1:])\n", + "print(\"No. of test examples = \",x_test.shape[0])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jwfKOIqpSv5b", + "outputId": "fcbd876f-f172-4941-d382-65a9886ab9b9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", + "\u001b[1m11490434/11490434\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n", + "No. of training examples = 60000\n", + "Size of each image in dataset = (28, 28)\n", + "No. of test examples = 10000\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "n = 5\n", + "\n", + "index = np.random.choice(x_train.shape[0],5)\n", + "print(\"label: \",end=\"\")\n", + "\n", + "for i,ind in enumerate(index):\n", + " plt.subplot(1,n,i+1)\n", + " plt.imshow(x_train[ind],cmap=\"gray\")\n", + " plt.axis(\"off\")\n", + " print(y_train[ind],end=\" \")\n", + "\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 139 + }, + "id": "Gju72DOKS0cZ", + "outputId": "4756f983-120a-4d7d-ff76-ae923ab440d2" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "label: 4 7 4 4 1 " + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_train_flatten = x_train.reshape(x_train.shape[0], -1)\n", + "x_test_flatten = x_test.reshape(x_test.shape[0], -1)\n", + "n_validation = 10000\n", + "\n", + "x_validation = x_train_flatten[:n_validation]\n", + "y_validation = y_train[:n_validation]\n", + "\n", + "x_train_flatten = x_train_flatten[n_validation:]\n", + "y_train = y_train[n_validation:]\n", + "\n", + "print(\"Size of each image in dataset = \", x_train.shape[1:])\n", + "print(\"No. of training examples =\", x_train_flatten.shape[0])\n", + "print(\"No. of validation examples =\", x_validation.shape[0])\n", + "print(\"No. of test examples =\", x_test.shape[0])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "t7x8-d9NTdhO", + "outputId": "05e0654e-0a58-4b66-b878-b5c99a614b4a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Size of each image in dataset = (28, 28)\n", + "No. of training examples = 50000\n", + "No. of validation examples = 10000\n", + "No. of test examples = 10000\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from tensorflow import keras\n", + "from tensorflow.keras import layers\n", + "\n", + "model = keras.models.Sequential([\n", + " layers.Input(shape=(784,)),\n", + " layers.Dense(128, activation='relu'),\n", + " layers.Dense(64, activation='relu'),\n", + " layers.Dense(10, activation='softmax')\n", + "])" + ], + "metadata": { + "id": "P_NzNjTxT-hI" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model.compile(\n", + " optimizer=\"adam\",\n", + " loss=\"sparse_categorical_crossentropy\",\n", + " metrics=[\"accuracy\"]\n", + ")\n", + "\n", + "n_epochs = 10\n", + "batch_size = 512\n", + "\n", + "history = model.fit(\n", + " x_train_flatten, y_train,\n", + " epochs=n_epochs,\n", + " batch_size=batch_size,\n", + " validation_data=(x_validation, y_validation),\n", + " verbose=1\n", + ")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 373 + }, + "id": "SW8SOcFGUpzL", + "outputId": "e47d3577-a2c4-4d1f-fb2a-9fba79254026" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "error", + "ename": "ValueError", + "evalue": "Data cardinality is ambiguous. Make sure all arrays contain the same number of samples.'x' sizes: 50000\n'y' sizes: 30000\n", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipython-input-9-1119672429.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mbatch_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m512\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m history = model.fit(\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mx_train_flatten\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mn_epochs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/keras/src/utils/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;31m# To get the full stack trace, call:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0;31m# `keras.config.disable_traceback_filtering()`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 122\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 123\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/keras/src/trainers/data_adapters/data_adapter_utils.py\u001b[0m in \u001b[0;36mcheck_data_cardinality\u001b[0;34m(data)\u001b[0m\n\u001b[1;32m 113\u001b[0m )\n\u001b[1;32m 114\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34mf\"'{label}' sizes: {sizes}\\n\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 116\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: Data cardinality is ambiguous. Make sure all arrays contain the same number of samples.'x' sizes: 50000\n'y' sizes: 30000\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "results = model.evaluate(x_test_flatten, y_test)\n", + "print(\"Loss = \", results[0])\n", + "print(\"Accuracy = \", results[1] * 100, \"%\")\n", + "\n", + "plt.plot(history.history['accuracy'], label=\"Training Accuracy\")\n", + "plt.plot(history.history['val_accuracy'], label=\"Validation Accuracy\")\n", + "plt.title(\"Model Accuracy\")\n", + "plt.xlabel(\"Epochs\")\n", + "plt.ylabel(\"Accuracy\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n", + "plt.plot(history.history['loss'], label=\"Training Loss\")\n", + "plt.plot(history.history['val_loss'], label=\"Validation Loss\")\n", + "plt.title(\"Model Loss\")\n", + "plt.xlabel(\"Epochs\")\n", + "plt.ylabel(\"Loss\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 263 + }, + "id": "ZhDXSZt9VVzF", + "outputId": "eb134440-d322-4ba6-e171-88a755f8d997" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.0843 - loss: 107.0016\n", + "Loss = 112.7437744140625\n", + "Accuracy = 7.769999653100967 %\n" + ] + }, + { + "output_type": "error", + "ename": "NameError", + "evalue": "name 'history' is not defined", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipython-input-7-2864823823.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Accuracy = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"%\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'accuracy'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Training Accuracy\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'val_accuracy'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Validation Accuracy\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Model Accuracy\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'history' is not defined" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "n = 5\n", + "\n", + "index = np.random.choice(x_test.shape[0], n)\n", + "\n", + "print(\"Actual Labels: \")\n", + "for i, ind in enumerate(index):\n", + " plt.subplot(1, n, i + 1)\n", + " plt.imshow(x_test[ind], cmap=\"gray\")\n", + " plt.axis(\"off\")\n", + " print(y_test[ind], end=\" \")\n", + "\n", + "plt.show()\n", + "\n", + "print(\"\\nPredicted Labels: \")\n", + "\n", + "for i, ind in enumerate(index):\n", + "\n", + " img = x_test[ind].reshape(1, 784)\n", + "\n", + " prediction = model.predict(img, verbose=0)\n", + "\n", + " digit = np.argmax(prediction)\n", + "\n", + " print(digit, end=\" \")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 209 + }, + "id": "rcz7kRhPV2BI", + "outputId": "03c5a807-3859-4ff6-e9c6-db0ee8afe43e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Actual Labels: \n", + "4 2 5 9 6 " + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Predicted Labels: \n", + "8 8 6 1 8 " + ] + } + ] + } + ] +} \ No newline at end of file