{"cells":[{"metadata":{},"cell_type":"markdown","source":"# **CNN Model to predict digits**"},{"metadata":{},"cell_type":"markdown","source":"I have seen models in the notebook section that are overkill for the problem at hand. Like Inception to predict a measly digit of 28 by 28. Listed below is my model with less no of layers."},{"metadata":{},"cell_type":"markdown","source":"# **Import the packages**"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy\nimport pandas\nimport matplotlib.pyplot as plt\n\nfrom keras.utils import to_categorical\nfrom keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout\nfrom keras.models import Sequential\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import EarlyStopping","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Read the csv files**"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train_data = pandas.read_csv('../input/digit-recognizer/train.csv')\ntest_data = pandas.read_csv('../input/digit-recognizer/test.csv')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Split into labels and data**"},{"metadata":{},"cell_type":"markdown","source":"I had plit into validatio set to see training going correctly. Removed afterwards"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_y = to_categorical(train_data[\"label\"])\ntrain_x = train_data.loc[:, train_data.columns != \"label\"]\ntrain_x /= 256","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Reshape**"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_x = train_x.values.reshape(-1, 28, 28, 1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Add EarlyStopping**"},{"metadata":{"trusted":true},"cell_type":"code","source":"callback = EarlyStopping(monitor='loss', patience=8, restore_best_weights=True)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Create the model**"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(64, (3,3), activation='relu', input_shape=(28,28, 1)))\nmodel.add(MaxPooling2D((2,2)))\nmodel.add(Conv2D(64, (3,3), activation='relu'))\nmodel.add(MaxPooling2D((2,2)))\nmodel.add(Flatten())\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(256, activation='relu'))\nmodel.add(Dense(10, activation='sigmoid'))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Compile**"},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Avoid Overfitting**"},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen = ImageDataGenerator(\n    rotation_range=10,\n    zoom_range=0.1,\n    width_shift_range=0.1,\n    height_shift_range=0.1\n)\n\ndatagen.fit(train_x)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Train the model**"},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(datagen.flow(train_x, train_y, batch_size=32), epochs=80, callbacks=[callback])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# **Create submission**"},{"metadata":{"trusted":true},"cell_type":"code","source":"test_data /= 256\ntest_x = test_data.values.reshape(-1, 28, 28, 1)\ny_pred = model.predict(test_x)\ny_pred = numpy.argmax(y_pred, axis=1)\ny_pred = pandas.Series(y_pred,name='Label')\nsubmission = pandas.concat([pandas.Series(range(1, 28001), name='ImageId'), y_pred], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.to_csv('my_submission.csv', index=False)","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}