{"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 os\nimport pandas as pd\nimport numpy as np\nimport random\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nplt.style.use('seaborn-bright')\n\nnp.random.seed(0)\nimport warnings\nwarnings.filterwarnings('ignore')\n\nimport tensorflow as tf\n\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Flatten, Activation, Dropout, Conv2D, MaxPooling2D, BatchNormalization\n\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:27:58.371574Z","iopub.execute_input":"2021-10-26T07:27:58.371963Z","iopub.status.idle":"2021-10-26T07:27:58.388681Z","shell.execute_reply.started":"2021-10-26T07:27:58.371928Z","shell.execute_reply":"2021-10-26T07:27:58.387624Z"},"trusted":true},"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":{"iopub.status.busy":"2021-10-26T07:27:58.390448Z","iopub.execute_input":"2021-10-26T07:27:58.391265Z","iopub.status.idle":"2021-10-26T07:28:02.242951Z","shell.execute_reply.started":"2021-10-26T07:27:58.391217Z","shell.execute_reply":"2021-10-26T07:28:02.241812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Train Data Shape: {}'.format(train.shape))\nprint('Test Data Shape: {}'.format(test.shape))","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:02.244887Z","iopub.execute_input":"2021-10-26T07:28:02.245187Z","iopub.status.idle":"2021-10-26T07:28:02.250138Z","shell.execute_reply.started":"2021-10-26T07:28:02.245158Z","shell.execute_reply":"2021-10-26T07:28:02.248877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:02.252032Z","iopub.execute_input":"2021-10-26T07:28:02.252331Z","iopub.status.idle":"2021-10-26T07:28:02.282322Z","shell.execute_reply.started":"2021-10-26T07:28:02.252290Z","shell.execute_reply":"2021-10-26T07:28:02.280942Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(6, 4))\nsns.countplot(train['label'])\nplt.xlabel('Label')\nplt.ylabel('Count')","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:02.284662Z","iopub.execute_input":"2021-10-26T07:28:02.285144Z","iopub.status.idle":"2021-10-26T07:28:02.457379Z","shell.execute_reply.started":"2021-10-26T07:28:02.285097Z","shell.execute_reply":"2021-10-26T07:28:02.456393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train = train.label.astype('float32')\nX_train = train.drop('label', axis=1).astype('float32')\nX_test = test.astype('float32')\n\nprint(X_train.shape, y_train.shape, X_test.shape)","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:02.458842Z","iopub.execute_input":"2021-10-26T07:28:02.459123Z","iopub.status.idle":"2021-10-26T07:28:02.722360Z","shell.execute_reply.started":"2021-10-26T07:28:02.459095Z","shell.execute_reply":"2021-10-26T07:28:02.721258Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train.values.reshape(-1, 28, 28, 1)\nX_train = X_train / 255.0\n\nX_test = X_test.values.reshape(-1, 28, 28, 1)\nX_test = X_test / 255.0\n\nprint(X_train.shape, X_test.shape)","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:02.723349Z","iopub.execute_input":"2021-10-26T07:28:02.723620Z","iopub.status.idle":"2021-10-26T07:28:02.818347Z","shell.execute_reply.started":"2021-10-26T07:28:02.723592Z","shell.execute_reply":"2021-10-26T07:28:02.817237Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 12))\nfor i in range(1, 6):\n    plt.subplot(5, 5, i)\n    plt.imshow(X_train[random.randint(0, len(X_train))])","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:02.820896Z","iopub.execute_input":"2021-10-26T07:28:02.821182Z","iopub.status.idle":"2021-10-26T07:28:03.244891Z","shell.execute_reply.started":"2021-10-26T07:28:02.821152Z","shell.execute_reply":"2021-10-26T07:28:03.243798Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 12))\nfor i in range(1, 6):\n    plt.subplot(5, 5, i)\n    plt.imshow(X_test[random.randint(0, len(X_test))])","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:03.246390Z","iopub.execute_input":"2021-10-26T07:28:03.246711Z","iopub.status.idle":"2021-10-26T07:28:03.643958Z","shell.execute_reply.started":"2021-10-26T07:28:03.246653Z","shell.execute_reply":"2021-10-26T07:28:03.643192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train = tf.keras.utils.to_categorical(y_train, 10)\ny_train.shape","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:03.645013Z","iopub.execute_input":"2021-10-26T07:28:03.645401Z","iopub.status.idle":"2021-10-26T07:28:03.652064Z","shell.execute_reply.started":"2021-10-26T07:28:03.645371Z","shell.execute_reply":"2021-10-26T07:28:03.651014Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['label'].head()","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:03.653287Z","iopub.execute_input":"2021-10-26T07:28:03.653854Z","iopub.status.idle":"2021-10-26T07:28:03.664338Z","shell.execute_reply.started":"2021-10-26T07:28:03.653821Z","shell.execute_reply":"2021-10-26T07:28:03.663401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train[0:5, :]","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:03.665603Z","iopub.execute_input":"2021-10-26T07:28:03.665874Z","iopub.status.idle":"2021-10-26T07:28:03.678834Z","shell.execute_reply.started":"2021-10-26T07:28:03.665848Z","shell.execute_reply":"2021-10-26T07:28:03.678010Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.Sequential([\n    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), \n    Conv2D(32, (3, 3), activation='relu'),\n    MaxPooling2D(2, 2), \n    Conv2D(64, (3, 3), activation='relu', padding='Same'), \n    Conv2D(64, (3, 3), activation='relu', padding='Same'), \n    MaxPooling2D(pool_size=(2, 2), strides=(2, 2)), \n    Dropout(0.25), \n    Conv2D(64, (3, 3), activation='relu', padding='Same'), \n    Conv2D(64, (3, 3), activation='relu', padding='Same'), \n    MaxPooling2D(pool_size=(2, 2), strides=(2, 2)),\n    Dropout(0.25), \n    Flatten(), \n    Dense(256, activation='relu'), \n    Dense(256, activation='relu'), \n    Dropout(0.50), \n    Dense(10, activation='softmax')\n])\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:03.680117Z","iopub.execute_input":"2021-10-26T07:28:03.680462Z","iopub.status.idle":"2021-10-26T07:28:03.802962Z","shell.execute_reply.started":"2021-10-26T07:28:03.680429Z","shell.execute_reply":"2021-10-26T07:28:03.801836Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Callback(tf.keras.callbacks.Callback):\n    def end_if(self, epoch, logs={}):\n        if (logs.get('accuracy') > 0.999):\n            print('Reached 0.99 accuracy')\n            self.model.stop_training = True\n            \ncallbacks = Callback()","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:03.804497Z","iopub.execute_input":"2021-10-26T07:28:03.804884Z","iopub.status.idle":"2021-10-26T07:28:03.810360Z","shell.execute_reply.started":"2021-10-26T07:28:03.804849Z","shell.execute_reply":"2021-10-26T07:28:03.809275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"optimizer = tf.keras.optimizers.Adam(\n                    learning_rate=0.0005, \n                    beta_1=0.9, \n                    beta_2=0.999, \n                    epsilon=1e-07, \n                    name='Adam')\n\nmodel.compile(optimizer=optimizer,\n              loss='categorical_crossentropy',\n              metrics=['accuracy'])\n\nmodel.fit(X_train, y_train, batch_size=20, epochs=10, callbacks=[callbacks])","metadata":{"execution":{"iopub.status.busy":"2021-10-26T07:28:03.811673Z","iopub.execute_input":"2021-10-26T07:28:03.812091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred = model.predict(X_test)\n\npred = np.argmax(pred, axis=1)\n\npred = pd.Series(pred, name='Label')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.concat([pd.Series(range(1, 28001), name='ImageID'), pred], axis=1)\nsubmission.to_csv('submission.csv', index=False)\n\nsubmission.head(10)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### ","metadata":{}}]}