{"cells":[{"metadata":{"_uuid":"2191f3a20b15fe5e435abf59663757d75c3ea66d"},"cell_type":"markdown","source":"# Imports"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import os\nfrom pathlib import Path\nimport keras \nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout\nfrom keras.optimizers import Adam\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nPATH=Path(\"../input/\")\nprint(os.listdir(\"../input/\"))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f745f366d3e678fac2794915c7641a08fcb64fbf"},"cell_type":"markdown","source":"# Load Data"},{"metadata":{"trusted":true,"_uuid":"ed4a792e2d10caf2f2dfc0d6b80b3df26bbd3ec2"},"cell_type":"code","source":"train=pd.read_csv(PATH/'train.csv')\ntest=pd.read_csv(PATH/'test.csv')\ntrain.shape,test.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1ada90b663e8ce6c94e08d9fc2bce59a4ab84acd"},"cell_type":"markdown","source":"# Extract Input and Target Variable"},{"metadata":{"trusted":true,"_uuid":"59f29e6513f9a66bb0a403cfb13a6b82802cd7ca"},"cell_type":"code","source":"x=train.drop(\"label\",axis=1)\ny=np.array(train['label'])\nx.shape,y.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"23716c102081d5495e81bb129a050432fd0ba5af"},"cell_type":"markdown","source":"# Train Test Split"},{"metadata":{"trusted":true,"_uuid":"aa12d0a5daab52015e6a0f73635d6865bcd0ad99"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9a9c95e25064d679d74462151eead379c3b6aab4"},"cell_type":"code","source":"x_train, x_valid, y_train, y_valid = train_test_split(x,y,test_size=0.2,random_state=123)\nprint(x_train.shape,x_valid.shape)\nx_train = x_train.values.reshape(33600, 784)\nx_valid = x_valid.values.reshape(8400, 784)\nx_train = x_train.astype('float32')\nx_valid = x_valid.astype('float32')\nx_train /= 255\nx_valid /= 255\nprint(x_train.shape[0], 'train samples')\nprint(x_valid.shape[0], 'valid samples')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"bb699a1f6384e7c49577b7ae5fc9afdf0e41ea75"},"cell_type":"markdown","source":"# Convert class vectors to binary class matrices"},{"metadata":{"trusted":true,"_uuid":"b02ce7f9de9549d6822bf6c12915bedb18c70a96"},"cell_type":"code","source":"y_train.shape,y_train[:2]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4881edcdc197912f7146446c01731bc1eb8d5fb2"},"cell_type":"code","source":"num_classes=10\ny_train = keras.utils.to_categorical(y_train, num_classes)\ny_valid = keras.utils.to_categorical(y_valid, num_classes)\nprint(y_train.shape,y_valid.shape)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"fe11b89cbae74e057e44952a839c76093630cf27"},"cell_type":"markdown","source":"# Model Architecture"},{"metadata":{"trusted":true,"_uuid":"4ac21e7dcbd54df27469268f6dea722c618674e9"},"cell_type":"code","source":"model = Sequential()\nmodel.add(Dense(256, activation='relu', input_shape=(784,)))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(num_classes, activation='softmax'))\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"931f9b5107cf37e41704d148ff368a0f41d09716"},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy',\n              optimizer=Adam(lr=0.01),\n              metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"85cfd2f06419784198f96504697d4dd13eb64761"},"cell_type":"code","source":"epochs=5\nbatch_size=64\nhistory = model.fit(x_train, y_train,\n                    batch_size=batch_size,\n                    epochs=epochs,\n                    verbose=1,\n                    validation_data=(x_valid, y_valid))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"65a66192593cfa3870fef006eccdc4f2d6af032d"},"cell_type":"code","source":"score = model.evaluate(x_valid, y_valid, verbose=0)\nprint('Valid loss:', score[0])\nprint('Valid accuracy:', score[1])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9e3b915804ab59a1a03e743bef31ee86e9aaa05e"},"cell_type":"code","source":"#from pathlib import Path\n#import simplejson\n#serialize model to JSON\n#filepath_json=Path('../input/')\n#model_json = model.to_json()\n#with open(filepath_json/\"mnist_keras.json\", \"w\") as json_file:\n #   json_file.write(simplejson.dumps(simplejson.loads(model_json), indent=4))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7b63130cbec4567f96bf4e06e784434e16ca7fd4"},"cell_type":"code","source":"model.save_weights(\"mnist_keras.h5\")","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"59e8ab130fb69bbd3e20033ad21572a871bc021b"},"cell_type":"markdown","source":"# Load Test Data"},{"metadata":{"trusted":true,"_uuid":"221dd8509e5b9616ee05d4aca03fe03ccf87b43b"},"cell_type":"code","source":"test = pd.read_csv(\"../input/test.csv\")\nprint(test.shape)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3ebb95731b3d4ae940c71c47c3b18bb0fdd64888"},"cell_type":"markdown","source":"# Preprocessing"},{"metadata":{"trusted":true,"_uuid":"7a3793656fc34f9d7cfa59d34d68e94b607aa199"},"cell_type":"code","source":"x_test=test.loc[:,test.columns != \"label\"]\nx_test = x_test.astype('float32')\nx_test /= 255\nprint(x_test.shape[0], 'test samples')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a4ae0792b62d1a4913c9f3cebcf021954719e245"},"cell_type":"code","source":"score = model.predict(x_test, verbose=0)\nprint(score.shape)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"5380fa620eb61cb28b69939e9581b4759d4dd8c9"},"cell_type":"markdown","source":"# Take a look"},{"metadata":{"trusted":true,"_uuid":"4ddf78a9bcc079172ddbd0993c044ea4f62bc8a2"},"cell_type":"code","source":"np.argmax(score,axis=1)[:4],np.argmax(score,axis=1).shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9dcbf7526fe080b21393efd5841557deebecc1f4"},"cell_type":"markdown","source":"# Generate Predictions"},{"metadata":{"trusted":true,"_uuid":"e1e3f4303e10e2807685210e8d307439d86ee17a"},"cell_type":"code","source":"predictions=np.argmax(score,axis=1)\nprint(\"Prediction shape\",predictions.shape)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"4bd9187ea3b3586791699d710935062fc173e49d"},"cell_type":"markdown","source":"# Create Submission File"},{"metadata":{"trusted":true,"_uuid":"0ccee80c2d9fb3277318035d09d2db41066eb7c5"},"cell_type":"code","source":"submissions=pd.DataFrame({\"ImageId\": list(range(1,len(predictions)+1)),\n                         \"Label\": predictions})\nsubmissions.to_csv(\"my_submissions_keras.csv\", index=False, header=True)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}