{"cells":[{"metadata":{"trusted":true},"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\n\n%matplotlib inline\nplt.style.use(\"ggplot\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\")\ndf_test = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(df_train.shape)\nprint(df_test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(10,5))\nsns.countplot(df_train[\"label\"])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = df_train.iloc[:,1:]\ny = df_train.iloc[:,:1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(X.shape)\nprint(y.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = X / 255.0\ndf_test = df_test / 255.0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X.head(2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"## Reshape The Data\nX = X.values.reshape(-1,28,28,1)\ndf_test = df_test.values.reshape(-1,28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y = keras.utils.to_categorical(y,num_classes=10)\ny","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"## Split The Data into X_train, X_test, y_train, y_test\nX_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(f\"X_train.shape : {X_train.shape}\")\nprint(f\"X_test.shape : {X_test.shape}\")\nprint(f\"y_train.shape : {y_train.shape}\")\nprint(f\"y_test.shape : {y_test.shape}\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Define The Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = keras.Sequential([\n    keras.layers.Conv2D(32,(3,3),input_shape=(28,28,1)),\n    keras.layers.MaxPooling2D(2,2),\n    \n    keras.layers.Conv2D(64,(3,3),activation=\"relu\"),\n    keras.layers.MaxPooling2D(2,2),\n    \n    keras.layers.Conv2D(64,(3,3),activation=\"relu\"),\n    keras.layers.MaxPooling2D(2,2),\n    \n    keras.layers.Dropout(0.25),\n    \n    keras.layers.Flatten(),\n    keras.layers.Dense(128,activation=\"relu\"),\n    keras.layers.Dropout(0.5),\n    keras.layers.Dense(10,activation=\"softmax\")\n])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer=\"adam\",loss=\"categorical_crossentropy\",metrics=[\"accuracy\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"best_model = keras.callbacks.ModelCheckpoint(\"best_model.h5\",save_best_only=True)\nhistory = model.fit(X_train,y_train,epochs=50,verbose=1,validation_data=(X_test,y_test),callbacks=[best_model])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(10,5))\n\nacc = 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\")\n\nplt.legend()\nplt.figure()\n\nplt.figure(figsize=(10,5))\n\nplt.plot(epochs,loss,\"r\",label=\"Training Loss\")\nplt.plot(epochs,val_loss,\"b\",label=\"Validation Loss\")\n\nplt.legend()\nplt.show()","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}