{"cells":[{"cell_type":"markdown","metadata":{"_cell_guid":"c5775693-0a3b-04c7-246f-aab3a7303da5"},"source":"This is a **work in progress** notebook."},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"49ad0403-f67c-a09c-dacd-1c2fdfe4ccb4"},"outputs":[],"source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n\n# Any results you write to the current directory are saved as output.\n\n%matplotlib inline\nimport matplotlib.pyplot as plt\nimport keras"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"46753d9c-0270-3fc8-980d-8924b60f3c4b"},"outputs":[],"source":"training_data = pd.read_csv('../input/train.csv')\nxtrain = np.asarray(training_data.ix[:, 1:], dtype=np.float32)\nytrain = keras.utils.np_utils.to_categorical(training_data.ix[:, 0])\n\n# standardise training data\nmu = np.mean(xtrain, axis=0)\nxtrain -= mu[np.newaxis, :]\nsigma = np.std(xtrain, axis=0, ddof=1)\nnz = np.nonzero(sigma)\nxtrain[:, nz] /= sigma[np.newaxis, nz]\nxtrain = xtrain.reshape((-1, 28, 28, 1))\n\nprint(xtrain.shape, xtrain.dtype)\nprint(ytrain.shape, ytrain.dtype)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"dfbeb1f6-ec26-fb75-075c-9f6ae181e0bb"},"outputs":[],"source":"inp = keras.layers.Input(shape=xtrain.shape[1:])\nhid = inp\nfor num_filters in [10, 10, 10, 10]:\n    hid = keras.layers.Conv2D(num_filters, kernel_size=(3, 3), activation='relu')(hid)\nhid = keras.layers.MaxPooling2D(pool_size=(2, 2))(hid)\nhid = keras.layers.Flatten()(hid)\nhid = keras.layers.Dropout(0.2)(hid)\nfor num_neurons in [200, 100, 50]:\n    hid = keras.layers.Dense(num_neurons, activation='relu')(hid)\n    hid = keras.layers.Dropout(0.2)(hid)\nout = keras.layers.Dense(ytrain.shape[1], activation='softmax')(hid)\nmodel = keras.models.Model(inp, out)\nmodel.compile('adadelta', 'categorical_crossentropy', metrics=['accuracy'])"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"3d13e443-53ba-5dd4-f8e6-2b838d64a0a6"},"outputs":[],"source":"fit = model.fit(\n    xtrain, ytrain,\n    epochs=20,\n    batch_size=256,\n    validation_split=0.2,\n    verbose=1,\n    callbacks=[\n        keras.callbacks.EarlyStopping(\n            monitor='val_loss',\n            patience=2)])\n\nfig, axes = plt.subplots(1, 2, figsize=(10, 4))\naxes[0].plot(fit.epoch, fit.history['loss'], '-s', label='training')\naxes[0].plot(fit.epoch, fit.history['val_loss'], '-o', label='validation')\naxes[0].set_ylabel('loss')\naxes[1].plot(fit.epoch, fit.history['acc'], '-s', label='training')\naxes[1].plot(fit.epoch, fit.history['val_acc'], '-o', label='validation')\naxes[1].set_ylabel('accuracy')\nfor ax in axes.flat:\n    ax.set_xlabel('epoch')\n    ax.legend()\nfig.tight_layout()"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"bbf24b92-f228-2315-5e2d-e326584fd17b"},"outputs":[],"source":"test_data = pd.read_csv('../input/test.csv')\nxtest = np.asarray(test_data.ix[:, :], dtype=np.float32)\nxtest -= mu[np.newaxis, :]\nxtest[:, nz] /= sigma[np.newaxis, nz]\nxtest = xtest.reshape((-1, 28, 28, 1))\n\nsubmission = pd.DataFrame({\n    'ImageId': np.arange(xtest.shape[0]) + 1,\n    'Label': np.argmax(model.predict(xtest), axis=1)})\n\nsubmission.to_csv('submission.csv', index=False, header=True)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"77039170-c9d5-b9a3-e9bd-94a69b9c1e37"},"outputs":[],"source":""}],"metadata":{"_change_revision":0,"_is_fork":false,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.0"}},"nbformat":4,"nbformat_minor":0}