{"cells":[{"metadata":{"id":"XtLQlEtHDGwO","colab_type":"text"},"cell_type":"markdown","source":"# Convolutional Neural Networks example on MNIST Dataset"},{"metadata":{"id":"U_NF3lT8DAXY","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"import keras\nimport pandas as pd\nimport numpy as np\nfrom keras.datasets import mnist\nimport matplotlib.pyplot as plt\nfrom keras.utils import to_categorical\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","execution_count":null,"outputs":[]},{"metadata":{"id":"sz-OHzuN-Pju","colab_type":"text"},"cell_type":"markdown","source":"### Loading dataset:"},{"metadata":{"id":"Z6UVn7AdEIkA","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"#(x_train, y_train), (x_test, y_test) = mnist.load_data()\ntrain = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\")\nprint(train.shape)\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\")\ntest.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = train.iloc[:,1:].values\ny_train = train.iloc[:,0].values\nx_test = test.values","execution_count":null,"outputs":[]},{"metadata":{"id":"UJWk5Xh6T8Lb","colab_type":"text"},"cell_type":"markdown","source":"### Exploring dataset:"},{"metadata":{"id":"I6ImtBMQEkpi","colab_type":"code","outputId":"29fa182f-5761-401e-ba39-c3838d6d8426","colab":{"base_uri":"https://localhost:8080/","height":116},"trusted":true},"cell_type":"code","source":"plt.figure()\nfig, ax = plt.subplots(1,6)\nfor i in range(0,6):\n  ax[i].imshow(x_train[i].reshape(28,28))","execution_count":null,"outputs":[]},{"metadata":{"id":"flD1kvxIhETb","colab_type":"code","outputId":"d276fc6c-79da-476b-b280-060d7f79a94d","colab":{"base_uri":"https://localhost:8080/","height":51},"trusted":true},"cell_type":"code","source":"print(x_train.max())\nprint(x_train.min())","execution_count":null,"outputs":[]},{"metadata":{"id":"ijl-Q9uy8wrO","colab_type":"text"},"cell_type":"markdown","source":"### Reshaping input:\nbecause cnn takes 4D arrays: batch, height, width, channels(3 for RGB or 1 for grayscale)"},{"metadata":{"id":"TmX02WZ6GSZH","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"x_train = x_train.reshape(x_train.shape[0],28,28,1)\nx_test = x_test.reshape(x_test.shape[0],28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"id":"hMAo16O588P2","colab_type":"text"},"cell_type":"markdown","source":"### Normalizing Data:"},{"metadata":{"id":"hWQ8_diG8uOh","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"x_train = x_train.astype('float32')\nx_train = x_train/255\nx_test = x_test.astype('float32')\nx_test = x_test/255","execution_count":null,"outputs":[]},{"metadata":{"id":"_l68Wc-q9FDp","colab_type":"text"},"cell_type":"markdown","source":"### One hot encoding on labels:"},{"metadata":{"id":"nr4pafWXH1tX","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"y_train = to_categorical(y_train,10)\n#y_test = to_categorical(y_test,10)","execution_count":null,"outputs":[]},{"metadata":{"id":"Wsz3jclH9sHs","colab_type":"text"},"cell_type":"markdown","source":"### Creating the CNN:\nConvolutional -> Convolutional -> Pooling -> Dropout -> Flatten -> Dense -> Dropout -> Dense"},{"metadata":{"id":"fByPX0s6Ig29","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"model = Sequential()\n# input_shape takes tuple with (height, width, channels) only for first layer\nmodel.add(Conv2D(filters=32, kernel_size=5, activation='relu', input_shape=x_train.shape[1:]))\nmodel.add(Conv2D(filters=32, kernel_size=5, activation='relu'))\nmodel.add(MaxPooling2D(pool_size=2))\nmodel.add(Dropout(rate=0.25))\nmodel.add(Flatten())\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dropout(rate=0.5))\nmodel.add(Dense(10, activation='softmax'))","execution_count":null,"outputs":[]},{"metadata":{"id":"_IMa9HnRKugq","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"id":"8oWckw5FjMs0","colab_type":"code","outputId":"3c55ed63-e190-4405-aad5-8071bd34178b","colab":{"base_uri":"https://localhost:8080/","height":374},"trusted":true},"cell_type":"code","source":"epochs = 1\nbatch_size = 32\nmodel.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"id":"1GcCw1FoggsP","colab_type":"text"},"cell_type":"markdown","source":"## Predicting test set and saving results"},{"metadata":{"id":"FUeqi3TOgGpJ","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"y_predict = model.predict_classes(x_test)\nnp.savetxt(\"output.csv\",np.c_[range(1,len(y_predict)+1), y_predict], delimiter=',', header=\"ImageID,Label\", comments = '', fmt='%d')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"colab":{"name":"CNN.ipynb","provenance":[],"collapsed_sections":[],"machine_shape":"hm"},"kernelspec":{"name":"python3","display_name":"Python 3"}},"nbformat":4,"nbformat_minor":1}