{"cells":[{"metadata":{"trusted":true,"_uuid":"1b718b50ffddd09c5a40997df4880b9728a3c873"},"cell_type":"code","source":"#To check Tensorflow/Keras is using GPU or not\nfrom tensorflow.python.client import device_lib\nprint(device_lib.list_local_devices())","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd\n\nimport os\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"5c30687861fc281b71b4783e77c7f3678405aa72"},"cell_type":"markdown","source":"## Import Data and Split into Training and Testing"},{"metadata":{"_uuid":"d2c84915f1ec18fddeba7d3b7c0e64bdea4f107f","trusted":true,"collapsed":true},"cell_type":"code","source":"Data = pd.read_csv(\"../input/train.csv\")\n\ntarget = Data['label']\nimage_data = Data.drop(['label'], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"7d34cab797088d635ebf96b701d35aa8150d1905","trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train, X_test, Y_train, Y_test = train_test_split(image_data, target)\n\nprint('Training data and target sizes: \\n{}, {}'.format(X_train.shape,Y_train.shape))\nprint('Test data and target sizes: \\n{}, {}'.format(X_test.shape,Y_test.shape))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1e12632bffa4263d05e8865168c8be5bce8b9672"},"cell_type":"markdown","source":"## Design Neural Network"},{"metadata":{"trusted":true,"_uuid":"f281946fa34a6f8c0395c2d2753fb98799d3c231"},"cell_type":"code","source":"from __future__ import print_function\n\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout\nfrom keras.optimizers import RMSprop","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"d601cb1b66f24a1ca2fb973b55b8863990e02bb8"},"cell_type":"code","source":"batch_size = 128\nnum_classes = 10\nepochs = 35","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c73336ef17657aa8af15f216181bef7b21d2d11e"},"cell_type":"code","source":"x_train = X_train.as_matrix()\nx_test = X_test.as_matrix()\nx_train = x_train.astype('float32')\nx_test = x_test.astype('float32')\nx_train /= 255\nx_test /= 255\n\nprint(x_train.shape[0], 'train samples')\nprint(x_test.shape[0], 'test samples')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"30ac29d6baa3041a6a10a734eaf77bc924c38b1d"},"cell_type":"code","source":"# convert class vectors to binary class matrices\ny_train = keras.utils.to_categorical(Y_train, num_classes)\ny_test = keras.utils.to_categorical(Y_test, num_classes)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c872f8d12431d1d966a6f0ad3771ad9669331e17"},"cell_type":"code","source":"model = Sequential()\nmodel.add(Dense(512, activation='relu', input_shape=(784,)))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(512, activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(num_classes, activation='sigmoid')) #softmax\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c78a03a5ae98d9de69822f043b461180dac36e11"},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy',\n              optimizer=RMSprop(),\n              metrics=['accuracy'])\n\nhistory = model.fit(x_train, y_train,\n                    batch_size=batch_size,\n                    epochs=epochs,\n                    verbose=1,\n                    validation_data=(x_test, y_test))\nscore = model.evaluate(x_test, y_test, verbose=0)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d0812e71bd37ad88e6b28564645f963da71d59e1"},"cell_type":"markdown","source":"### Save trained model if required (optional)"},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"ab01bd6564203cb69afa7fe6b75f35c37f033d3c","_kg_hide-output":false},"cell_type":"code","source":"# save model to JSON\nmodel_json = model.to_json()\nwith open(\"models/model.json\", \"w\") as json_file:\n    json_file.write(model_json)\n\n# save weights to HDF5\nmodel.save_weights(\"models/model.h5\")\nprint(\"Saved model to disk\")\n\nprint('Test loss:', score[0])\nprint('Test accuracy:', score[1])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3dd07f62fb95cc8fb1d2f68248d3dceea7ac31f3"},"cell_type":"markdown","source":"### Load Saved Model"},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"61fa674e8756b0746e50ef210bd68ba6640ae466"},"cell_type":"code","source":"#from keras.models import model_from_json\n\n# load json and create model\n#json_file = open('models/model.json', 'r')\n#loaded_model_json = json_file.read()\n#json_file.close()\n#loaded_model = model_from_json(loaded_model_json)\n# load weights into new model\n#loaded_model.load_weights(\"models/model.h5\")\n#print(\"Loaded model from disk\")\n\n#loaded_model.summary()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"562cce1457b53a415a19e43b9699161f0cd75e94"},"cell_type":"markdown","source":"## Validate Testing set (Optional)"},{"metadata":{"trusted":true,"_uuid":"44fb4b8857e960c5cd665f97572d1133239a654b"},"cell_type":"code","source":"countA, countB = [], []\n\npred = model.predict_classes(x_test)\n\n#print ('Actual\\t', 'Predicted')\nfor i, (char0,char1) in enumerate(zip(Y_test.values, pred), 1):\n    count = 0\n    count1 = 0\n    #print (i, char0,\"\\t\", char1)\n    if char0 == char1:\n        count = count + 1\n        countA.append(count)\n    else:\n        count1 = count1 + 1\n        countB.append(count1)\nprint (\"True Predicted: {0} \\nFalse Predicted: {1}\".format(sum(countA), sum(countB)))","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}