{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.model_selection import train_test_split\nfrom keras.layers import Conv2D,Dense,Flatten,MaxPool2D,Dropout,BatchNormalization","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.describe()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_ex=train.iloc[:,1:].values.reshape(-1,28,28,1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_ex.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels=np.array(train.label)\nfor i in range(25):\n    print(labels[i])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(10,10))\nfor i in range (25):\n    plt.subplot(5,5,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.grid(False)\n    plt.imshow(train_ex[i])\n    plt.xlabel(labels[i])\nplt.show()    ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(train['label'])\nplt.plot()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.label.value_counts().sort_index()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_im,valid_im,train_label,valid_label=train_test_split(train_ex,train.label,test_size=0.15,random_state=42)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=tf.keras.models.Sequential()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.add(Conv2D(64,(3,3),strides=1,padding=\"same\",activation='relu',input_shape=(28,28,1)))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Conv2D(128,3,padding='same',activation='relu'))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Conv2D(512,3,padding='same',activation='relu'))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Conv2D(512,3,padding='same',activation='relu'))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Flatten())\nmodel.add(Dropout(0.5))\nmodel.add(Dense(128,activation='relu'))\nmodel.add(Dense(10,activation='softmax'))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer='Adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history=model.fit(train_im,train_label,steps_per_epoch=50, validation_data=(valid_im,valid_label), epochs=50, verbose=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_loss, test_acc= model.evaluate(valid_im,valid_label)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs = range(len(acc))\n\nplt.plot(epochs, acc, 'r', label='Training accuracy')\nplt.plot(epochs, val_acc, 'b', label='Validation accuracy')\nplt.title('Training and validation accuracy')\nplt.legend(loc=0)\nplt.figure()\n\n\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_im=test.iloc[:,:].values.reshape(-1,28,28,1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_im.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions=model.predict(test_im,verbose=0)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_labels=np.argmax(predictions,axis=-1)\ntest_labels","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(20,20))\nfor i in range (100):\n    plt.subplot(10,10,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.grid(False)\n    plt.imshow(test_im[i])\n    plt.xlabel(test_labels[i])\nplt.show()  ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n\nprint('Accuracy: ', accuracy_score(valid_label, np.argmax(model.predict(valid_im), axis=1)))\nprint('Precision: ', precision_score(valid_label, np.argmax(model.predict(valid_im), axis=1), average='macro'))\nprint('Recall: ', recall_score(valid_label, np.argmax(model.predict(valid_im), axis=1), average='macro'))\nprint('F1 Score: ', f1_score(valid_label, np.argmax(model.predict(valid_im), axis=1), average='macro'))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission=pd.DataFrame(test_labels,columns=['Label'])\nsubmission['Imageid']=[x for x in range(1,28001)]\nsubmission","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv(\"/kaggle/working/submission_1.csv\",index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"With Normalization","metadata":{}},{"cell_type":"code","source":"train_im=train_im/255.0\nvalid_im=valid_im/255.0\ntest_im=test_im/255.0","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model2=tf.keras.models.Sequential()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model2.add(Conv2D(64,(3,3),strides=1,padding=\"same\",activation='relu',input_shape=(28,28,1)))\nmodel2.add(MaxPool2D(2,2))\nmodel2.add(BatchNormalization())\nmodel2.add(Conv2D(128,3,padding='same',activation='relu'))\nmodel2.add(MaxPool2D(2,2))\nmodel2.add(BatchNormalization())\nmodel2.add(Conv2D(512,3,padding='same',activation='relu'))\nmodel2.add(MaxPool2D(2,2))\nmodel2.add(BatchNormalization())\nmodel2.add(Conv2D(512,3,padding='same',activation='relu'))\nmodel2.add(MaxPool2D(2,2))\nmodel2.add(BatchNormalization())\nmodel2.add(Flatten())\nmodel2.add(Dropout(0.5))\nmodel2.add(Dense(128,activation='relu'))\nmodel2.add(BatchNormalization())\nmodel2.add(Dense(10,activation='softmax'))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model2.compile(optimizer='Adam', loss='sparse_categorical_crossentropy',metrics=['accuracy'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history2=model2.fit(train_im,train_label,validation_data=(valid_im,valid_label),epochs=50,verbose=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_loss, test_acc= model2.evaluate(valid_im,valid_label)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc = history2.history['accuracy']\nval_acc = history2.history['val_accuracy']\nloss = history2.history['loss']\nval_loss = history2.history['val_loss']\n\nepochs = range(len(acc))\n\nplt.plot(epochs, acc, 'r', label='Training accuracy')\nplt.plot(epochs, val_acc, 'b', label='Validation accuracy')\nplt.title('Training and validation accuracy')\nplt.legend(loc=0)\nplt.figure()\n\n\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions2=model2.predict(test_im,verbose=0)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_labels_2=np.argmax(predictions2,axis=-1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(20,20))\nfor i in range (100):\n    plt.subplot(10,10,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.grid(False)\n    plt.imshow(test_im[i])\n    plt.xlabel(test_labels_2[i])\nplt.show()  ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n\nprint('Accuracy: ', accuracy_score(valid_label, np.argmax(model2.predict(valid_im), axis=1)))\nprint('Precision: ', precision_score(valid_label, np.argmax(model2.predict(valid_im), axis=1), average='macro'))\nprint('Recall: ', recall_score(valid_label, np.argmax(model2.predict(valid_im), axis=1), average='macro'))\nprint('F1 Score: ', f1_score(valid_label, np.argmax(model2.predict(valid_im), axis=1), average='macro'))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_2=pd.DataFrame(test_labels_2,columns=['Label'])\nsubmission_2['Imageid']=[x for x in range(1,28001)]\nsubmission_2","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_2.to_csv(\"/kaggle/working/submission_2.csv\",index=False)","metadata":{},"execution_count":null,"outputs":[]}]}