{"cells":[{"metadata":{"id":"NRyw3g0dHYzP"},"cell_type":"markdown","source":"# CNN - Beginner"},{"metadata":{"id":"YOoaaWzt3EaB"},"cell_type":"markdown","source":"## Importing Packages & CSV"},{"metadata":{"id":"yYDu_b_PHV7j","trusted":true},"cell_type":"code","source":"#Importing essential packages\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport seaborn as sns\nimport pandas as pd\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.preprocessing import StandardScaler\n\nfrom keras.utils.np_utils import to_categorical\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Conv2D, Flatten, MaxPool2D\nfrom keras.optimizers import adam, RMSprop\nfrom keras.preprocessing.image import img_to_array, ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau","execution_count":null,"outputs":[]},{"metadata":{"id":"b4-pdEy8KqVh","outputId":"27e604dc-2f25-4d5b-e9df-6ef3c1307d0c","trusted":true},"cell_type":"code","source":"#importing train & test Data\ntrain = pd.read_csv(\"../input/digit-recognizer/train.csv\")\ntest = pd.read_csv(\"../input/digit-recognizer/test.csv\")\nsam_sub = pd.read_csv(\"../input/digit-recognizer/sample_submission.csv\")\ntrain[:1]","execution_count":null,"outputs":[]},{"metadata":{"id":"ctYGTB8z3O3j"},"cell_type":"markdown","source":"### Checking for null values"},{"metadata":{"id":"ZPRgwyxHMZ8t","outputId":"32ec5bd5-da10-42d2-9596-ce37d5186ece","trusted":true},"cell_type":"code","source":"print(\"No. of Null value \",train.isnull().any().sum())\nprint(\"No. of Null value \",test.isnull().any().sum())\nprint(train.shape)\nprint(test.shape)\n#there is no null values","execution_count":null,"outputs":[]},{"metadata":{"id":"deg4PRhXK2OT","outputId":"0c2eace9-7100-4bff-a1b3-040517d3b5ec","trusted":true},"cell_type":"code","source":"#seperating features & target values\ny_train = train[\"label\"]\nx_train = train.drop(\"label\",axis=1)\ny_train[:1]","execution_count":null,"outputs":[]},{"metadata":{"id":"41bvRWIvL6Ha","outputId":"6bad7971-126e-433b-e328-e273d314106c","trusted":true},"cell_type":"code","source":"#target variable distribution\nsns.countplot(y_train)","execution_count":null,"outputs":[]},{"metadata":{"id":"QdfuKg7HNe_u","trusted":true},"cell_type":"code","source":"#scaling values to increase its speed\nscaler = StandardScaler()\nscaler.fit(x_train)\nx_train = scaler.transform(x_train)\ntest = scaler.transform(test)","execution_count":null,"outputs":[]},{"metadata":{"id":"ViOBKThyOIyz","trusted":true},"cell_type":"code","source":"#reshaping\nx_train = x_train.reshape(-1,28,28,1)\ntest = test.reshape(-1,28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"id":"QOHHWRSM0psz","outputId":"73825307-c4b6-43bf-97c0-8a35b944d0d3","trusted":true},"cell_type":"code","source":"#viewing sample value\nplt.imshow(x_train[1][:,:,0])\nplt.title(y_train[1])","execution_count":null,"outputs":[]},{"metadata":{"id":"8jSx9QC4UeTn","outputId":"aed502d0-2991-4233-9473-f8e2df06888d","trusted":true},"cell_type":"code","source":"#converting target value into categorical array\nprint(y_train[:1])\ny_train = to_categorical(y_train,10)\ny_train[:1]","execution_count":null,"outputs":[]},{"metadata":{"id":"Oo7GFcugUgGR","trusted":true},"cell_type":"code","source":"X_train, X_test, Y_train, Y_test = train_test_split(x_train, y_train, test_size = 0.1, random_state=7)","execution_count":null,"outputs":[]},{"metadata":{"id":"4uDD8OefXCqj","outputId":"e75817d0-5952-42de-cf4c-018217a25009","trusted":true},"cell_type":"code","source":"plt.imshow(X_train[0][:,:,0])\nplt.title(Y_train[0])","execution_count":null,"outputs":[]},{"metadata":{"id":"LxZU5QhuMvm4"},"cell_type":"markdown","source":"Model Used in NN\n* Activation function: \n\n  ReLu\n  \n  * ReLU is important because it does not saturate; the gradient is always high (equal to 1) if the neuron activates. As long as it is not a dead neuron, successive updates are fairly effective. ReLU is also very quick to evaluate. \n\n  Softmax\n\n  * The softmax activation function is used in neural networks when we want to build a multi-class classifier which solves the problem of assigning an instance to one class when the number of possible classes is larger than two.\n\n* Max Pooling\n\n  * Max pooling is a sample-based discretization process. The objective is to down-sample an input representation (image, hidden-layer output matrix, etc.), reducing its dimensionality and allowing for assumptions to be made about features contained in the sub-regions binned.\n\n* Padding\n\n  * Padding is a term relevant to convolutional neural networks as it refers to the amount of pixels added to an image when it is being processed by the kernel of a CNN. For example, if the padding in a CNN is set to zero, then every pixel value that is added will be of value zero."},{"metadata":{"id":"mdW21k82XMGX","outputId":"f13d4bf7-b68a-4a86-c2ce-813a2341dbb2","trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(filters=44,kernel_size=(3,3),padding=\"same\",activation=\"relu\",input_shape=(28,28,1)))\nmodel.add(Conv2D(filters=33,kernel_size=(3,3),padding=\"same\",activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(.21))\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),padding=\"same\",activation=\"relu\"))\nmodel.add(Conv2D(filters=55,kernel_size=(3,3),padding=\"same\",activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\nmodel.add(Dropout(.21))\n\nmodel.add(Flatten())\nmodel.add(Dense(256,activation=\"relu\"))\nmodel.add(Dropout(.20))\nmodel.add(Dense(10,activation=\"softmax\"))","execution_count":null,"outputs":[]},{"metadata":{"id":"8CQpJgdXZxMZ","trusted":true},"cell_type":"code","source":"opt = RMSprop()\nopt1= adam()\nreduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2,\n                              patience=4, min_lr=0.0001)","execution_count":null,"outputs":[]},{"metadata":{"id":"bcKoGZjBaaeE","trusted":true},"cell_type":"code","source":"model.compile(optimizer=opt1,loss=\"categorical_crossentropy\",metrics=[\"accuracy\"])","execution_count":null,"outputs":[]},{"metadata":{"id":"CIlG8_XDav8T","outputId":"052c594a-8191-409f-fb64-5cfb2db55438","trusted":true},"cell_type":"code","source":"model.fit(X_train,Y_train,batch_size=25,epochs=30,callbacks=[reduce_lr])","execution_count":null,"outputs":[]},{"metadata":{"id":"WVEeyD4SxFDS","trusted":true},"cell_type":"code","source":"y_pred = model.predict(X_test)","execution_count":null,"outputs":[]},{"metadata":{"id":"3WO8jGbv57fN","trusted":true},"cell_type":"code","source":"pred = np.argmax(y_pred,axis = 1) \ny_test = np.argmax(Y_test,axis = 1)","execution_count":null,"outputs":[]},{"metadata":{"id":"8T_kxmpc6CM4","outputId":"a6a73e13-958b-4eee-a205-7102386fd32f","trusted":true},"cell_type":"code","source":"confusion_matrix(pred,y_test)","execution_count":null,"outputs":[]},{"metadata":{"id":"anuoqeTQ9Kzq","trusted":true},"cell_type":"code","source":"tst_pred = model.predict(test)\npreds = np.argmax(tst_pred,axis = 1)","execution_count":null,"outputs":[]},{"metadata":{"id":"vcG5Oe2n9O2S","trusted":true},"cell_type":"code","source":"rst = pd.DataFrame(preds,columns=[\"Label\"])\nrst[\"ImageId\"] = pd.Series(range(1,(len(preds)+1)))","execution_count":null,"outputs":[]},{"metadata":{"id":"czbADmMO-tHT","outputId":"77abc782-2423-438e-ec32-a496996e3711","trusted":true},"cell_type":"code","source":"sub = rst[[\"ImageId\",\"Label\"]]\nsub.shape","execution_count":null,"outputs":[]},{"metadata":{"id":"_VEF6IYj-uMq","trusted":true},"cell_type":"code","source":"sub.to_csv(\"submission.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{"id":"cZKWWd07BLZK","outputId":"65c81bd9-4955-47c1-ade8-5d269d924521","trusted":true},"cell_type":"code","source":"sam_sub[:4]","execution_count":null,"outputs":[]},{"metadata":{"id":"98ZcMVCKBcOa","outputId":"6952c691-d1ed-4af0-d491-6d5f3859ff48","trusted":true},"cell_type":"code","source":"sub[:4]","execution_count":null,"outputs":[]},{"metadata":{"id":"bsYrAUsrDKro","trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"colab":{"name":"CNN_Beg.ipynb","provenance":[],"collapsed_sections":[],"toc_visible":true},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":4}