├── init ├── images ├── init ├── ann.png ├── or.png ├── xor.png ├── ANDand.png ├── combo.png ├── image1.png ├── image2.png ├── matmul.png ├── nand.png ├── deepnet.png └── image_2.png ├── README.md ├── imdb-reviews-classification.ipynb ├── forward-pass.ipynb └── keras.ipynb /init: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /images/init: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /images/ann.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/ann.png -------------------------------------------------------------------------------- /images/or.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/or.png -------------------------------------------------------------------------------- /images/xor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/xor.png -------------------------------------------------------------------------------- /images/ANDand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/ANDand.png -------------------------------------------------------------------------------- /images/combo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/combo.png -------------------------------------------------------------------------------- /images/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/image1.png -------------------------------------------------------------------------------- /images/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/image2.png -------------------------------------------------------------------------------- /images/matmul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/matmul.png -------------------------------------------------------------------------------- /images/nand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/nand.png -------------------------------------------------------------------------------- /images/deepnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/deepnet.png -------------------------------------------------------------------------------- /images/image_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContentUpgrad/intro_to_neural_networks/main/images/image_2.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to Neural Networks for NLP 2 | 3 | ## TOC: 4 | - What is where? 5 | - FAQs 6 | 7 | ### What is where? 8 | The folder structure is given below: 9 | 10 | ![](images/image1.png) 11 | 12 | As you can see there are three main code files when you log in: 13 | 14 | 1. **forward-pass.ipynb** This is the code file for session 1: Understanding Neural Networks 15 | 2. **keras.ipynb** This is where all the code files for session 3: Understanding Tensorflow are kept 16 | 3. **imdb-reviews-classification.ipynb** This is the code file for session 4: Case Study: IMDB Movie review classification 17 | 18 | The datasets required are linked in the code files itself. Please follow the steps that are shown in the video demonstration to install the data files. 19 | OR 20 | You can download the data files from [here](https://drive.google.com/drive/u/0/folders/1hYw0TQbwcM2YWEiKN-2c_kHCPtHO_TMC) 21 | 22 | 23 | 24 | ### FAQs 25 | How do i download all the files in github? 26 | ![](images/image_2.png) 27 | Click on Code button and then click on Download ZIP 28 | OR 29 | Use `git clone https://github.com/ContentUpgrad/intro_to_neural_networks.git` command on your terminal if git is installed in your machine. 30 | -------------------------------------------------------------------------------- /imdb-reviews-classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "respective-webster", 6 | "metadata": {}, 7 | "source": [ 8 | "# Text Classification" 9 | ] 10 | }, 11 | { 12 | "cell_type": "raw", 13 | "id": "adverse-evolution", 14 | "metadata": {}, 15 | "source": [ 16 | "----------------------------------------------------------------------\n", 17 | "Filename : imdb-reviews-classification.ipynb\n", 18 | "Author : Jaidev Deshpande\n", 19 | "Purpose : Understanding text classification using keras\n", 20 | "Libraries: tensorflow.keras, numpy, sklearn and pandas\n", 21 | "----------------------------------------------------------------------" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "id": "seasonal-balloon", 28 | "metadata": {}, 29 | "outputs": [], 30 | "source": [ 31 | "# Imports\n", 32 | "\n", 33 | "from tensorflow.keras.preprocessing import text_dataset_from_directory\n", 34 | "from tensorflow.keras import Sequential\n", 35 | "from tensorflow.keras.layers import Dense\n", 36 | "from tensorflow.keras.optimizers import SGD\n", 37 | "\n", 38 | "import pandas as pd\n", 39 | "import numpy as np\n", 40 | "from sklearn.feature_extraction.text import TfidfVectorizer\n", 41 | "from sklearn.model_selection import train_test_split\n", 42 | "import matplotlib.pyplot as plt\n", 43 | "%matplotlib inline" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "id": "corrected-railway", 49 | "metadata": {}, 50 | "source": [ 51 | "## The Problem: Large Movie Dataset Review\n", 52 | "### Classify movie reviews from IMDB into positive or negative sentiment.\n", 53 | "### Download the dataset [here](https://drive.google.com/drive/u/0/folders/1hYw0TQbwcM2YWEiKN-2c_kHCPtHO_TMC)" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": null, 59 | "id": "fossil-vertical", 60 | "metadata": {}, 61 | "outputs": [], 62 | "source": [ 63 | "# Importing & preprocessing the dataset\n", 64 | "\n", 65 | "train_ds = text_dataset_from_directory('aclImdb/train')\n", 66 | "test_ds = text_dataset_from_directory('aclImdb/test')\n", 67 | "\n", 68 | "dfTrain = pd.DataFrame(train_ds.unbatch().as_numpy_iterator(), columns=['text', 'label'])\n", 69 | "dfTest = pd.DataFrame(test_ds.unbatch().as_numpy_iterator(), columns=['text', 'label'])\n", 70 | "_, xts = train_test_split(dfTest, stratify=dfTest['label'], test_size=0.25)" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "id": "vertical-northern", 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [ 80 | "# Look at a sample movie review\n", 81 | "\n", 82 | "print(dfTrain.loc[0, 'text'])" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": null, 88 | "id": "virgin-illustration", 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [ 92 | "# Look at the label of the review\n", 93 | "\n", 94 | "dfTrain.loc[0, 'label']" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": null, 100 | "id": "sustained-camcorder", 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [ 104 | "pd.options.display.max_colwidth = 100\n", 105 | "dfTrain.head()" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": null, 111 | "id": "improved-negotiation", 112 | "metadata": {}, 113 | "outputs": [], 114 | "source": [ 115 | "dfTest.head()" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": null, 121 | "id": "enormous-comment", 122 | "metadata": {}, 123 | "outputs": [], 124 | "source": [ 125 | "# Feature Extraction - Text to TFIDF\n", 126 | "\n", 127 | "vect = TfidfVectorizer(stop_words='english')\n", 128 | "XTrain = vect.fit_transform(dfTrain['text']).toarray()\n", 129 | "XTest = vect.transform(xts['text']).toarray()" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": null, 135 | "id": "included-healing", 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "XTrain.shape" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": null, 145 | "id": "according-russia", 146 | "metadata": {}, 147 | "outputs": [], 148 | "source": [ 149 | "# Assemble and compile the neural network\n", 150 | "\n", 151 | "model = Sequential([\n", 152 | " Dense(128, input_shape=(XTrain.shape[1],), activation='relu'),\n", 153 | " Dense(128, activation='relu'),\n", 154 | " Dense(64, activation='relu'),\n", 155 | " Dense(1, activation='sigmoid')\n", 156 | "])\n", 157 | "model.compile(loss='binary_crossentropy', optimizer=SGD(lr=1e-3), metrics=['accuracy'])" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": null, 163 | "id": "protective-parking", 164 | "metadata": { 165 | "scrolled": true 166 | }, 167 | "outputs": [], 168 | "source": [ 169 | "# Train the neural network\n", 170 | "\n", 171 | "history = model.fit(XTrain, dfTrain['label'], batch_size=64, validation_data=(XTest, xts['label']), epochs=50)" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": null, 177 | "id": "completed-poultry", 178 | "metadata": {}, 179 | "outputs": [], 180 | "source": [ 181 | "# Visualize the learning curve\n", 182 | "\n", 183 | "plt.plot(history.history['accuracy'], label='Train Accuracy')\n", 184 | "plt.plot(history.history['val_accuracy'], label='Test Accuracy')\n", 185 | "plt.legend()" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": null, 191 | "id": "metallic-office", 192 | "metadata": {}, 193 | "outputs": [], 194 | "source": [] 195 | } 196 | ], 197 | "metadata": { 198 | "kernelspec": { 199 | "display_name": "Python 3", 200 | "language": "python", 201 | "name": "python3" 202 | }, 203 | "language_info": { 204 | "codemirror_mode": { 205 | "name": "ipython", 206 | "version": 3 207 | }, 208 | "file_extension": ".py", 209 | "mimetype": "text/x-python", 210 | "name": "python", 211 | "nbconvert_exporter": "python", 212 | "pygments_lexer": "ipython3", 213 | "version": "3.7.7" 214 | } 215 | }, 216 | "nbformat": 4, 217 | "nbformat_minor": 5 218 | } 219 | -------------------------------------------------------------------------------- /forward-pass.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "looking-election", 6 | "metadata": {}, 7 | "source": [ 8 | "# Forward Pass" 9 | ] 10 | }, 11 | { 12 | "cell_type": "raw", 13 | "id": "continuous-royalty", 14 | "metadata": {}, 15 | "source": [ 16 | "----------------------------------------------------------------------\n", 17 | "Filename : forward-pass.ipynb\n", 18 | "Author : Jaidev Deshpande\n", 19 | "Content : Understanding feed forward propagation\n", 20 | "Libraries: numpy, sklearn and pandas\n", 21 | "----------------------------------------------------------------------" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "id": "understood-island", 28 | "metadata": {}, 29 | "outputs": [], 30 | "source": [ 31 | "# Importing libraries\n", 32 | "\n", 33 | "from sklearn.datasets import load_iris\n", 34 | "import pandas as pd\n", 35 | "import numpy as np" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "id": "spoken-clarity", 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "# Load the Iris dataset\n", 46 | "\n", 47 | "iris = load_iris()\n", 48 | "X = iris.data\n", 49 | "y = iris.target\n", 50 | "df = pd.DataFrame(X, columns=iris.feature_names)\n", 51 | "df['species'] = iris.target_names[y]\n", 52 | "df.sample(n=5)" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "id": "western-consensus", 58 | "metadata": {}, 59 | "source": [ 60 | "" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": null, 66 | "id": "detailed-nomination", 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "# Activation functions\n", 71 | "\n", 72 | "def sigmoid(x):\n", 73 | " return 1 / (1 + np.exp(-x))\n", 74 | "\n", 75 | "\n", 76 | "def softmax(x):\n", 77 | " return np.exp(x) / np.exp(x).sum()" 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "id": "unable-typing", 83 | "metadata": {}, 84 | "source": [ 85 | "## Matrix Multiplication\n", 86 | " " 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "id": "played-brighton", 92 | "metadata": {}, 93 | "source": [ 94 | "## Layer 1 Weights, Biases and Activation" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "id": "mounted-penetration", 100 | "metadata": {}, 101 | "source": [ 102 | "" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": null, 108 | "id": "loving-metropolitan", 109 | "metadata": {}, 110 | "outputs": [], 111 | "source": [ 112 | "df.head()" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": null, 118 | "id": "split-tension", 119 | "metadata": {}, 120 | "outputs": [], 121 | "source": [ 122 | "x = X[:5]\n", 123 | "x" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "id": "cross-finder", 130 | "metadata": {}, 131 | "outputs": [], 132 | "source": [ 133 | "# Initialize weights and biases\n", 134 | "\n", 135 | "w1 = np.random.rand(4, 5)\n", 136 | "b1 = np.random.rand(5)\n", 137 | "print(w1.shape)\n", 138 | "print(b1.shape)" 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": null, 144 | "id": "recorded-prison", 145 | "metadata": {}, 146 | "outputs": [], 147 | "source": [ 148 | "# Take a data sample\n", 149 | "\n", 150 | "sample = x[0]\n", 151 | "sample" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": null, 157 | "id": "american-access", 158 | "metadata": {}, 159 | "outputs": [], 160 | "source": [ 161 | "print(w1)" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": null, 167 | "id": "governing-reader", 168 | "metadata": {}, 169 | "outputs": [], 170 | "source": [ 171 | "# Multiply the sample with the first layer weights <𝐱,𝐰1>\n", 172 | "\n", 173 | "a1 = np.dot(sample, w1)\n", 174 | "a1" 175 | ] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "execution_count": null, 180 | "id": "concrete-differential", 181 | "metadata": {}, 182 | "outputs": [], 183 | "source": [ 184 | "b1" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": null, 190 | "id": "institutional-talent", 191 | "metadata": {}, 192 | "outputs": [], 193 | "source": [ 194 | "# Add the bias to the product <𝐱,𝐰1>+ b\n", 195 | "\n", 196 | "a1 + b1" 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": null, 202 | "id": "balanced-storm", 203 | "metadata": {}, 204 | "outputs": [], 205 | "source": [ 206 | "# Apply the activation to get the output of the first layer f(<𝐱,𝐰1>+ b)\n", 207 | "\n", 208 | "f1 = sigmoid(a1 + b1)\n", 209 | "f1" 210 | ] 211 | }, 212 | { 213 | "cell_type": "markdown", 214 | "id": "promising-exhibit", 215 | "metadata": {}, 216 | "source": [ 217 | "## Layer 2: Weights, Biases and Activations" 218 | ] 219 | }, 220 | { 221 | "cell_type": "markdown", 222 | "id": "acknowledged-cruise", 223 | "metadata": {}, 224 | "source": [ 225 | "" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": null, 231 | "id": "color-source", 232 | "metadata": {}, 233 | "outputs": [], 234 | "source": [ 235 | "w2 = np.random.rand(5, 7)\n", 236 | "b2 = np.random.rand(7)" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": null, 242 | "id": "visible-fifth", 243 | "metadata": {}, 244 | "outputs": [], 245 | "source": [ 246 | "a2 = np.dot(f1, w2) + b2\n", 247 | "a2" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": null, 253 | "id": "radical-serum", 254 | "metadata": {}, 255 | "outputs": [], 256 | "source": [ 257 | "f2 = sigmoid(a2)\n", 258 | "f2" 259 | ] 260 | }, 261 | { 262 | "cell_type": "markdown", 263 | "id": "ahead-outreach", 264 | "metadata": {}, 265 | "source": [ 266 | "## Layer 3: Weights, Biases and Activations" 267 | ] 268 | }, 269 | { 270 | "cell_type": "markdown", 271 | "id": "fuzzy-homeless", 272 | "metadata": {}, 273 | "source": [ 274 | "" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": null, 280 | "id": "conventional-white", 281 | "metadata": {}, 282 | "outputs": [], 283 | "source": [ 284 | "w3 = np.random.rand(7, 3)\n", 285 | "b3 = np.random.rand(3)" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "id": "beautiful-springfield", 292 | "metadata": {}, 293 | "outputs": [], 294 | "source": [ 295 | "a3 = np.dot(f2, w3) + b3\n", 296 | "a3" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": null, 302 | "id": "solid-inquiry", 303 | "metadata": {}, 304 | "outputs": [], 305 | "source": [ 306 | "f3 = softmax(a3)\n", 307 | "f3" 308 | ] 309 | }, 310 | { 311 | "cell_type": "code", 312 | "execution_count": null, 313 | "id": "valuable-science", 314 | "metadata": {}, 315 | "outputs": [], 316 | "source": [] 317 | } 318 | ], 319 | "metadata": { 320 | "kernelspec": { 321 | "display_name": "Python 3", 322 | "language": "python", 323 | "name": "python3" 324 | }, 325 | "language_info": { 326 | "codemirror_mode": { 327 | "name": "ipython", 328 | "version": 3 329 | }, 330 | "file_extension": ".py", 331 | "mimetype": "text/x-python", 332 | "name": "python", 333 | "nbconvert_exporter": "python", 334 | "pygments_lexer": "ipython3", 335 | "version": "3.7.7" 336 | } 337 | }, 338 | "nbformat": 4, 339 | "nbformat_minor": 5 340 | } 341 | -------------------------------------------------------------------------------- /keras.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## [Installing Tensorflow / Keras](https://www.tensorflow.org/install)" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 2, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "# Imports\n", 17 | "\n", 18 | "from tensorflow.keras.layers import Dense\n", 19 | "from tensorflow.keras import Sequential\n", 20 | "from tensorflow.keras.optimizers import SGD\n", 21 | "from tensorflow.keras.utils import to_categorical, plot_model\n", 22 | "import pandas as pd\n", 23 | "import numpy as np\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "%matplotlib inline" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "## Problem: **Credit Card Fraud Detection**\n", 33 | "### Given a list of 28 anonimyzed features and the amount of money involved in a credt card transaction, predict whether the transaction is likely to be fraudulent.\n", 34 | "### Source: https://www.kaggle.com/mlg-ulb/creditcardfraud/" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 3, 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "data": { 44 | "text/html": [ 45 | "
\n", 46 | "\n", 59 | "\n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | "
V1V2V3V4V5V6V7V8V9V10...V21V22V23V24V25V26V27V28AmountClass
0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.3637870.090794...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620
11.1918570.2661510.1664800.4481540.060018-0.082361-0.0788030.085102-0.255425-0.166974...-0.225775-0.6386720.101288-0.3398460.1671700.125895-0.0089830.0147242.690
2-1.358354-1.3401631.7732090.379780-0.5031981.8004990.7914610.247676-1.5146540.207643...0.2479980.7716790.909412-0.689281-0.327642-0.139097-0.055353-0.059752378.660
3-0.966272-0.1852261.792993-0.863291-0.0103091.2472030.2376090.377436-1.387024-0.054952...-0.1083000.005274-0.190321-1.1755750.647376-0.2219290.0627230.061458123.500
4-1.1582330.8777371.5487180.403034-0.4071930.0959210.592941-0.2705330.8177390.753074...-0.0094310.798278-0.1374580.141267-0.2060100.5022920.2194220.21515369.990
\n", 209 | "

5 rows × 30 columns

\n", 210 | "
" 211 | ], 212 | "text/plain": [ 213 | " V1 V2 V3 V4 V5 V6 V7 \\\n", 214 | "0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n", 215 | "1 1.191857 0.266151 0.166480 0.448154 0.060018 -0.082361 -0.078803 \n", 216 | "2 -1.358354 -1.340163 1.773209 0.379780 -0.503198 1.800499 0.791461 \n", 217 | "3 -0.966272 -0.185226 1.792993 -0.863291 -0.010309 1.247203 0.237609 \n", 218 | "4 -1.158233 0.877737 1.548718 0.403034 -0.407193 0.095921 0.592941 \n", 219 | "\n", 220 | " V8 V9 V10 ... V21 V22 V23 V24 \\\n", 221 | "0 0.098698 0.363787 0.090794 ... -0.018307 0.277838 -0.110474 0.066928 \n", 222 | "1 0.085102 -0.255425 -0.166974 ... -0.225775 -0.638672 0.101288 -0.339846 \n", 223 | "2 0.247676 -1.514654 0.207643 ... 0.247998 0.771679 0.909412 -0.689281 \n", 224 | "3 0.377436 -1.387024 -0.054952 ... -0.108300 0.005274 -0.190321 -1.175575 \n", 225 | "4 -0.270533 0.817739 0.753074 ... -0.009431 0.798278 -0.137458 0.141267 \n", 226 | "\n", 227 | " V25 V26 V27 V28 Amount Class \n", 228 | "0 0.128539 -0.189115 0.133558 -0.021053 149.62 0 \n", 229 | "1 0.167170 0.125895 -0.008983 0.014724 2.69 0 \n", 230 | "2 -0.327642 -0.139097 -0.055353 -0.059752 378.66 0 \n", 231 | "3 0.647376 -0.221929 0.062723 0.061458 123.50 0 \n", 232 | "4 -0.206010 0.502292 0.219422 0.215153 69.99 0 \n", 233 | "\n", 234 | "[5 rows x 30 columns]" 235 | ] 236 | }, 237 | "execution_count": 3, 238 | "metadata": {}, 239 | "output_type": "execute_result" 240 | } 241 | ], 242 | "source": [ 243 | "# Preview dataset\n", 244 | "\n", 245 | "df = pd.read_csv('creditcard.csv')\n", 246 | "df.drop(['Time'], axis=1, inplace=True)\n", 247 | "df.head()" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 4, 253 | "metadata": {}, 254 | "outputs": [ 255 | { 256 | "name": "stdout", 257 | "output_type": "stream", 258 | "text": [ 259 | "284807\n" 260 | ] 261 | } 262 | ], 263 | "source": [ 264 | "print(len(df))" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 5, 270 | "metadata": {}, 271 | "outputs": [ 272 | { 273 | "data": { 274 | "text/plain": [ 275 | "0 0.998273\n", 276 | "1 0.001727\n", 277 | "Name: Class, dtype: float64" 278 | ] 279 | }, 280 | "execution_count": 5, 281 | "metadata": {}, 282 | "output_type": "execute_result" 283 | } 284 | ], 285 | "source": [ 286 | "# Check the proportion of the classes\n", 287 | "\n", 288 | "df['Class'].value_counts(normalize=True)" 289 | ] 290 | }, 291 | { 292 | "cell_type": "code", 293 | "execution_count": 6, 294 | "metadata": {}, 295 | "outputs": [ 296 | { 297 | "data": { 298 | "text/plain": [ 299 | "" 300 | ] 301 | }, 302 | "execution_count": 6, 303 | "metadata": {}, 304 | "output_type": "execute_result" 305 | }, 306 | { 307 | "data": { 308 | "image/png": "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\n", 309 | "text/plain": [ 310 | "
" 311 | ] 312 | }, 313 | "metadata": {}, 314 | "output_type": "display_data" 315 | } 316 | ], 317 | "source": [ 318 | "df['Class'].value_counts(normalize=True).plot(kind='pie')" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 7, 324 | "metadata": {}, 325 | "outputs": [], 326 | "source": [ 327 | "# Define the input and the output\n", 328 | "\n", 329 | "y = df.pop('Class').values\n", 330 | "X = df.values" 331 | ] 332 | }, 333 | { 334 | "cell_type": "code", 335 | "execution_count": 8, 336 | "metadata": {}, 337 | "outputs": [], 338 | "source": [ 339 | "# Assemble the network\n", 340 | "\n", 341 | "model = Sequential([\n", 342 | " Dense(16, input_shape=(29,), activation='relu'),\n", 343 | " Dense(8, activation='relu'),\n", 344 | " Dense(2, activation='softmax')\n", 345 | "])\n", 346 | "model.compile(loss='sparse_categorical_crossentropy', optimizer=SGD(lr=1e-3), metrics=['categorical_accuracy'])" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": 9, 352 | "metadata": {}, 353 | "outputs": [ 354 | { 355 | "name": "stdout", 356 | "output_type": "stream", 357 | "text": [ 358 | "('Failed to import pydot. You must `pip install pydot` and install graphviz (https://graphviz.gitlab.io/download/), ', 'for `pydotprint` to work.')\n" 359 | ] 360 | } 361 | ], 362 | "source": [ 363 | "# View the network - layer by layer\n", 364 | "\n", 365 | "plot_model(model, show_shapes=True, rankdir='LR')" 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": 10, 371 | "metadata": {}, 372 | "outputs": [ 373 | { 374 | "data": { 375 | "text/plain": [ 376 | "[,\n", 377 | " ,\n", 378 | " ]" 379 | ] 380 | }, 381 | "execution_count": 10, 382 | "metadata": {}, 383 | "output_type": "execute_result" 384 | } 385 | ], 386 | "source": [ 387 | "model.layers" 388 | ] 389 | }, 390 | { 391 | "cell_type": "code", 392 | "execution_count": 11, 393 | "metadata": {}, 394 | "outputs": [], 395 | "source": [ 396 | "layer1, layer2, layer3 = model.layers" 397 | ] 398 | }, 399 | { 400 | "cell_type": "code", 401 | "execution_count": 12, 402 | "metadata": {}, 403 | "outputs": [ 404 | { 405 | "name": "stdout", 406 | "output_type": "stream", 407 | "text": [ 408 | "(29, 16)\n", 409 | "(16,)\n" 410 | ] 411 | } 412 | ], 413 | "source": [ 414 | "# View the shapes of weights and biases for each layer\n", 415 | "\n", 416 | "l1_weight, l1_bias = layer1.weights\n", 417 | "print(l1_weight.shape)\n", 418 | "print(l1_bias.shape)" 419 | ] 420 | }, 421 | { 422 | "cell_type": "code", 423 | "execution_count": 13, 424 | "metadata": {}, 425 | "outputs": [ 426 | { 427 | "name": "stdout", 428 | "output_type": "stream", 429 | "text": [ 430 | "(16, 8)\n", 431 | "(8,)\n" 432 | ] 433 | } 434 | ], 435 | "source": [ 436 | "l2_weight, l2_bias = layer2.weights\n", 437 | "print(l2_weight.shape)\n", 438 | "print(l2_bias.shape)" 439 | ] 440 | }, 441 | { 442 | "cell_type": "code", 443 | "execution_count": 14, 444 | "metadata": {}, 445 | "outputs": [ 446 | { 447 | "name": "stdout", 448 | "output_type": "stream", 449 | "text": [ 450 | "(8, 2)\n", 451 | "(2,)\n" 452 | ] 453 | } 454 | ], 455 | "source": [ 456 | "l3_weight, l3_bias = layer3.weights\n", 457 | "print(l3_weight.shape)\n", 458 | "print(l3_bias.shape)" 459 | ] 460 | }, 461 | { 462 | "cell_type": "code", 463 | "execution_count": 15, 464 | "metadata": { 465 | "scrolled": true 466 | }, 467 | "outputs": [ 468 | { 469 | "name": "stdout", 470 | "output_type": "stream", 471 | "text": [ 472 | "Epoch 1/30\n", 473 | "2226/2226 [==============================] - 2s 590us/step - loss: 0.1794 - categorical_accuracy: 0.9629\n", 474 | "Epoch 2/30\n", 475 | "2226/2226 [==============================] - 1s 583us/step - loss: 0.1216 - categorical_accuracy: 0.9975\n", 476 | "Epoch 3/30\n", 477 | "2226/2226 [==============================] - 1s 594us/step - loss: 0.0876 - categorical_accuracy: 0.9991\n", 478 | "Epoch 4/30\n", 479 | "2226/2226 [==============================] - 1s 660us/step - loss: 0.0608 - categorical_accuracy: 0.9997\n", 480 | "Epoch 5/30\n", 481 | "2226/2226 [==============================] - 1s 670us/step - loss: 0.0422 - categorical_accuracy: 0.9998\n", 482 | "Epoch 6/30\n", 483 | "2226/2226 [==============================] - 1s 658us/step - loss: 0.0338 - categorical_accuracy: 0.9999\n", 484 | "Epoch 7/30\n", 485 | "2226/2226 [==============================] - 1s 625us/step - loss: 0.0267 - categorical_accuracy: 0.9997\n", 486 | "Epoch 8/30\n", 487 | "2226/2226 [==============================] - 1s 628us/step - loss: 0.0240 - categorical_accuracy: 0.9996\n", 488 | "Epoch 9/30\n", 489 | "2226/2226 [==============================] - 1s 668us/step - loss: 0.0193 - categorical_accuracy: 0.9995\n", 490 | "Epoch 10/30\n", 491 | "2226/2226 [==============================] - 1s 644us/step - loss: 0.0164 - categorical_accuracy: 0.9995\n", 492 | "Epoch 11/30\n", 493 | "2226/2226 [==============================] - 1s 654us/step - loss: 0.0135 - categorical_accuracy: 0.9994\n", 494 | "Epoch 12/30\n", 495 | "2226/2226 [==============================] - 2s 697us/step - loss: 0.0140 - categorical_accuracy: 0.9993\n", 496 | "Epoch 13/30\n", 497 | "2226/2226 [==============================] - 2s 839us/step - loss: 0.0114 - categorical_accuracy: 0.9993\n", 498 | "Epoch 14/30\n", 499 | "2226/2226 [==============================] - 2s 860us/step - loss: 0.0110 - categorical_accuracy: 0.9993\n", 500 | "Epoch 15/30\n", 501 | "2226/2226 [==============================] - 1s 668us/step - loss: 0.0113 - categorical_accuracy: 0.9992\n", 502 | "Epoch 16/30\n", 503 | "2226/2226 [==============================] - 2s 727us/step - loss: 0.0128 - categorical_accuracy: 0.9992\n", 504 | "Epoch 17/30\n", 505 | "2226/2226 [==============================] - 1s 645us/step - loss: 0.0098 - categorical_accuracy: 0.9991\n", 506 | "Epoch 18/30\n", 507 | "2226/2226 [==============================] - 1s 658us/step - loss: 0.0109 - categorical_accuracy: 0.9992\n", 508 | "Epoch 19/30\n", 509 | "2226/2226 [==============================] - 1s 648us/step - loss: 0.0094 - categorical_accuracy: 0.9991\n", 510 | "Epoch 20/30\n", 511 | "2226/2226 [==============================] - 2s 700us/step - loss: 0.0102 - categorical_accuracy: 0.9992\n", 512 | "Epoch 21/30\n", 513 | "2226/2226 [==============================] - 1s 666us/step - loss: 0.0095 - categorical_accuracy: 0.9991\n", 514 | "Epoch 22/30\n", 515 | "2226/2226 [==============================] - 2s 678us/step - loss: 0.0092 - categorical_accuracy: 0.9992\n", 516 | "Epoch 23/30\n", 517 | "2226/2226 [==============================] - 2s 865us/step - loss: 0.0087 - categorical_accuracy: 0.9992\n", 518 | "Epoch 24/30\n", 519 | "2226/2226 [==============================] - 3s 1ms/step - loss: 0.0079 - categorical_accuracy: 0.9992\n", 520 | "Epoch 25/30\n", 521 | "2226/2226 [==============================] - 2s 1ms/step - loss: 0.0120 - categorical_accuracy: 0.9991\n", 522 | "Epoch 26/30\n", 523 | "2226/2226 [==============================] - 2s 960us/step - loss: 0.0072 - categorical_accuracy: 0.9992\n", 524 | "Epoch 27/30\n", 525 | "2226/2226 [==============================] - 2s 982us/step - loss: 0.0093 - categorical_accuracy: 0.9991\n", 526 | "Epoch 28/30\n", 527 | "2226/2226 [==============================] - 2s 1ms/step - loss: 0.0077 - categorical_accuracy: 0.9991\n", 528 | "Epoch 29/30\n", 529 | "2226/2226 [==============================] - 2s 936us/step - loss: 0.0091 - categorical_accuracy: 0.9990\n", 530 | "Epoch 30/30\n", 531 | "2226/2226 [==============================] - 2s 853us/step - loss: 0.0091 - categorical_accuracy: 0.9989\n" 532 | ] 533 | } 534 | ], 535 | "source": [ 536 | "# Train the model\n", 537 | "\n", 538 | "history = model.fit(X, y, batch_size=128, epochs=30)" 539 | ] 540 | }, 541 | { 542 | "cell_type": "code", 543 | "execution_count": 16, 544 | "metadata": {}, 545 | "outputs": [ 546 | { 547 | "data": { 548 | "text/plain": [ 549 | "[]" 550 | ] 551 | }, 552 | "execution_count": 16, 553 | "metadata": {}, 554 | "output_type": "execute_result" 555 | }, 556 | { 557 | "data": { 558 | "image/png": "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\n", 559 | "text/plain": [ 560 | "
" 561 | ] 562 | }, 563 | "metadata": { 564 | "needs_background": "light" 565 | }, 566 | "output_type": "display_data" 567 | } 568 | ], 569 | "source": [ 570 | "# Plot the loss across epochs\n", 571 | "\n", 572 | "plt.plot(history.history['loss'], label='Loss')" 573 | ] 574 | }, 575 | { 576 | "cell_type": "code", 577 | "execution_count": 17, 578 | "metadata": {}, 579 | "outputs": [ 580 | { 581 | "data": { 582 | "text/plain": [ 583 | "[]" 584 | ] 585 | }, 586 | "execution_count": 17, 587 | "metadata": {}, 588 | "output_type": "execute_result" 589 | }, 590 | { 591 | "data": { 592 | "image/png": "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\n", 593 | "text/plain": [ 594 | "
" 595 | ] 596 | }, 597 | "metadata": { 598 | "needs_background": "light" 599 | }, 600 | "output_type": "display_data" 601 | } 602 | ], 603 | "source": [ 604 | "# Plot the accuracy across epochs\n", 605 | "\n", 606 | "plt.plot(history.history['categorical_accuracy'], label='Accuracy')" 607 | ] 608 | }, 609 | { 610 | "cell_type": "code", 611 | "execution_count": null, 612 | "metadata": {}, 613 | "outputs": [], 614 | "source": [] 615 | } 616 | ], 617 | "metadata": { 618 | "kernelspec": { 619 | "display_name": "Python 3", 620 | "language": "python", 621 | "name": "python3" 622 | }, 623 | "language_info": { 624 | "codemirror_mode": { 625 | "name": "ipython", 626 | "version": 3 627 | }, 628 | "file_extension": ".py", 629 | "mimetype": "text/x-python", 630 | "name": "python", 631 | "nbconvert_exporter": "python", 632 | "pygments_lexer": "ipython3", 633 | "version": "3.8.5" 634 | } 635 | }, 636 | "nbformat": 4, 637 | "nbformat_minor": 5 638 | } 639 | --------------------------------------------------------------------------------