{"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\n\nfrom sklearn.model_selection import train_test_split\n\nimport matplotlib.pyplot as plt\nimport matplotlib as mpl\n%matplotlib inline","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.random.seed(42)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load data: test data\ntest = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load data: train data\ntrain = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Drop all rows that have NaN/None values\ntest = test.dropna()\ntrain = train.dropna()","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Visualize data\ntrain.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Variables\n\nx = train.drop(train.columns[[0]], axis=1)\nx_train =  x.values.reshape(-1,28,28,1)\ny_train = train[\"label\"].values\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train, x_valid, y_train, y_valid = train_test_split(x_train, y_train, test_size = 0.1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(x_train.shape) \nprint(y_train.shape) ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Display image\nmpl.rc('axes', labelsize=14)\nmpl.rc('xtick', labelsize=12)\nmpl.rc('ytick', labelsize=12)\n\nplt.figure(figsize = (4,1))\nplt.imshow(x_train[0], cmap=\"gray\")\n\n","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"numbers = [\"zero\", \"one\", \"two\", \"three\", \"four\",\n               \"five\", \"six\", \"seven\", \"eight\", \"nine\"]\n\nnumbers[y_train[0]]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_rows = 4\nn_cols = 10\nplt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))\nfor row in range(n_rows):\n    for col in range(n_cols):\n        index = n_cols * row + col\n        plt.subplot(n_rows, n_cols, index + 1)\n        plt.imshow(x_train[index], cmap=\"binary\", interpolation=\"nearest\")\n        plt.axis('off')\n        plt.title(numbers[y_train[index]], fontsize=12)\nplt.subplots_adjust(wspace=0.2, hspace=0.5)\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tf.random.set_seed(42)\nnp.random.seed(42)\n\nmodel = keras.models.Sequential([\n    keras.layers.Flatten(input_shape = [28,28]),\n    keras.layers.BatchNormalization(),\n    keras.layers.Dense(200, kernel_initializer=\"lecun_normal\",kernel_regularizer=keras.regularizers.l2(0.09)),\n    keras.layers.ReLU(),\n    keras.layers.BatchNormalization(),\n    keras.layers.Dense(50, kernel_initializer=\"he_normal\",kernel_regularizer=keras.regularizers.l2(0.09)),\n    keras.layers.PReLU(),\n    keras.layers.BatchNormalization(),\n    keras.layers.Dense(10, activation=\"softmax\")\n])\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"keras.backend.clear_session()\nnp.random.seed(42)\ntf.random.set_seed(42)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.layers","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"keras.utils.plot_model(model, \"my_model.png\", show_shapes=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss = \"sparse_categorical_crossentropy\", optimizer = keras.optimizers.legacy.Adagrad(learning_rate=0.06, decay=1e-4), metrics = [\"accuracy\"])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":" history = model.fit(x_train, y_train, epochs = 50,validation_data = (x_valid, y_valid))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.DataFrame(history.history).plot(figsize=(8, 5))\nplt.grid(True)\nplt.gca().set_ylim(0, 1)\nplt.show()","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_test =  test.values.reshape(-1,28,28,1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = model.predict(x_test)\ny_pred = np.argmax(y_pred,axis = 1)\ny_pred = pd.Series(y_pred,name=\"Label\")\nsubmission = pd.concat([pd.Series(range(1,28001),name = \"ImageId\"),y_pred],axis = 1)\nsubmission.to_csv(\"project_DIGIT.csv\",index=False)","metadata":{},"execution_count":null,"outputs":[]}]}