{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"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)\nimport matplotlib.pyplot as plt\nfrom matplotlib import style\nstyle.use('dark_background')\nimport warnings\nwarnings.filterwarnings('ignore')\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 5GB 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","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"data_dir='/kaggle/input/digit-recognizer/'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train=pd.read_csv(data_dir+'train.csv')\ntest=pd.read_csv(data_dir+'test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train=train['label']\nx_train=train.drop('label',axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Visualizing some sample points"},{"metadata":{"trusted":true},"cell_type":"code","source":"def image_printer(i,df):\n    idx=i\n    data=df.iloc[idx].to_numpy().reshape(28,28).astype('uint8')\n    plt.imshow(data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(20,20))\nfor i in range(100):\n    plt.subplot(10,10,i+1)\n    image_printer(i,x_train)\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test=test","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Importing necessary libraries"},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\nimport keras\nfrom keras import backend as k\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Activation, BatchNormalization\nfrom keras.layers.convolutional import Conv2D, MaxPooling2D\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.utils import plot_model\nfrom keras.callbacks import EarlyStopping","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_cols=28\nimg_rows=28","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Reshaping and Normalizing the data"},{"metadata":{"trusted":true},"cell_type":"code","source":"if k.image_data_format=='channels_first':\n    x_train=x_train.values.reshape(x_train.shape[0],1,img_rows,img_cols)\n    test=test.values.reshape(test.shape[0],1,img_rows,img_cols)\n    x_train=x_train/255.0\n    test=test/255.0\n    input_shape=(1,img_rows,img_cols)\nelse:\n    x_train=x_train.values.reshape(x_train.shape[0],img_rows,img_cols,1)\n    test=test.values.reshape(test.shape[0],img_rows,img_cols,1)\n    x_train=x_train/255.0\n    test=test/255.0\n    input_shape=(img_rows,img_cols,1)\n    \n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"input_shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"earlystopping=EarlyStopping(monitor='val_accuracy',mode='auto',patience=10,restore_best_weights=True)\nmodelacc=[]\nnfilters=[64,128,256]\nconv_layers=[1,2,3,4,5]\ndense_layers=[0,1,2,3,4]\ndropouts=[0.5]\nfor filters in nfilters:\n    for conl in conv_layers:\n        for densel in dense_layers:\n            for dp in dropouts:\n                    cnnsays='Feature Maps: {} Convlayers: {} Denselayers: {} Dropouts: {}'.format(filters,conl,densel,dp)\n                    print(cnnsays)\n                    model=Sequential()\n                    model.add(Conv2D(filters,(3,3),input_shape=input_shape))\n                    model.add(BatchNormalization())\n                    model.add(Activation(\"relu\"))\n                    model.add(MaxPooling2D(pool_size=(2,2)))\n                    model.add(Dropout(dp))\n                    for i in range(conl-1):\n                        model.add(Conv2D(filters,(3,3),padding='same'))\n                        model.add(BatchNormalization())\n                        model.add(Activation(\"relu\"))\n                        model.add(MaxPooling2D(pool_size=(2,2),padding='same'))\n                        model.add(Dropout(dp))\n                    \n                    model.add(Flatten())\n                    \n                    for i in range(densel):\n                        \n                        model.add(Dense(256))\n                        model.add(BatchNormalization())\n                        model.add(Activation(\"relu\"))\n                        model.add(Dropout(dp))\n                    \n                    model.add(Dense(10,activation='softmax'))\n                    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])\n                    EPOCHS=30\n                    history=model.fit(x_train,y_train,batch_size=32,epochs=EPOCHS,validation_split=0.2,callbacks=[earlystopping])\n                    modelacc.append([round(100*max(history.history['val_accuracy']),2),cnnsays])\n                 \n                \n                                    \n                \n                \n                \n                \n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Highest validation accuracy {}'.format(round(100*max(history.history['val_accuracy']),2)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"modelacc.sort(reverse=True)\nmodelacc","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# model loss"},{"metadata":{"trusted":true},"cell_type":"code","source":"loss_train=history.history['loss']\nloss_val=history.history['val_loss']\nepochs=range(1,len(loss_val)+1)\nplt.plot(epochs,loss_train,'g',label='Trainning loss')\nplt.plot(epochs,loss_val,'b',label='Validation loss')\nplt.title('Training and validation loss')\nplt.xlabel('epochs')\nplt.ylabel('Loss')\nplt.legend()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# model accuracy"},{"metadata":{"trusted":true},"cell_type":"code","source":"acc_train=history.history['accuracy']\nacc_val=history.history['val_accuracy']\nepochs=range(1,len(acc_val)+1)\nplt.plot(epochs,acc_train,'g',label='Trainning Accuracy')\nplt.plot(epochs,acc_val,'b',label='Validation Accuracy')\nplt.title('Training and validation Accuracy')\nplt.xlabel('epochs')\nplt.ylabel('Accuracy')\nplt.legend()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Lets predict"},{"metadata":{"trusted":true},"cell_type":"code","source":"pred=model.predict([test])\nsoln=[]\nfor i in range(len(pred)):\n    soln.append(np.argmax(pred[i]))\n    ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Output"},{"metadata":{"trusted":true},"cell_type":"code","source":"final=pd.DataFrame()\nfinal['ImageId']=[i+1 for i in x_test.index]\nfinal['Label']=soln\nfinal.to_csv('newmnistcnn',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}