{"cells":[{"metadata":{"trusted":true,"_uuid":"827c86c36d32b8cbc956d65f56d17890ab33e0dd","_kg_hide-input":false,"_kg_hide-output":false},"cell_type":"code","source":"import tensorflow as tf\nimport numpy as np\nimport pandas as pd\nfrom tensorflow.keras.callbacks import TensorBoard\nfrom time import time","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b60e9daed8cd8375e7d6abb7895c79508e1be741"},"cell_type":"code","source":"#Read train and test csv\ntrain = pd.read_csv(\"../input/train.csv\") #label,pixel0,pixel1,...,pixel783\ntest_x = pd.read_csv(\"../input/test.csv\") #pixel0,pixel1,...,pixel783 (No Label)\ntrain_y=train['label'] #Our target only the labels \ntrain_x=train.drop('label','columns') #Our source only the pixels, we drop the column 'label'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"facb63fc2e8283d5d906df54efffa8d75563cd51"},"cell_type":"code","source":"#Separate the first 2000 for training, the remain for validation\ntrain_x,dev_x=train_x[2000:],train_x[:2000] \ntrain_y,dev_y=train_y[2000:],train_y[:2000]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c783810d866e0b7c4c51628987113243106f63b9"},"cell_type":"code","source":"#Data shape\nprint(train_x.shape,train_y.shape,dev_x.shape,dev_y.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"74f68246b3877418194d62782d69ed8645e81cba"},"cell_type":"code","source":"#Pandas to numpy\ntrain_x=train_x.values\ntrain_y=train_y.values\ndev_x=dev_x.values\ndev_y=dev_y.values\n#Transform targets [0,9,...,7] to [[1,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1],...,[0,0,0,0,0,0,0,1,0,0]]\ntrain_y = tf.keras.utils.to_categorical(train_y, 10)\ndev_y = tf.keras.utils.to_categorical(dev_y, 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"115cdbfc665fe03ccd2691564b943dca88eb319d"},"cell_type":"code","source":"#Create the model\nmodel = tf.keras.Sequential()\nmodel.add(tf.keras.layers.Reshape((28,28,1), input_shape=(784,))) #Reshape input [Pixel0,...,Pixel783] to [Pixel0,.......,Pixel27]\n                                                                                                        # [......................]\n                                                                                                        # [......................]\n                                                                                                        # [Pixel256,...,Pixel783]    \nmodel.add(tf.keras.layers.BatchNormalization()) #BachNorm\nmodel.add(tf.keras.layers.Activation(\"relu\"))   #Relu Activation\n\nmodel.add(tf.keras.layers.Conv2D(64, kernel_size=(5, 5), strides=(2,2))) #2D Convolution Layer\nmodel.add(tf.keras.layers.BatchNormalization()) #BachNorm\nmodel.add(tf.keras.layers.Activation(\"relu\")) #Relu Activation\n\nmodel.add(tf.keras.layers.Conv2D(128, kernel_size=(5, 5), strides=(2,2))) #2D Convolution Layer\nmodel.add(tf.keras.layers.BatchNormalization()) #BachNorm\nmodel.add(tf.keras.layers.Activation(\"relu\")) #Relu Activation\n\nmodel.add(tf.keras.layers.Conv2D(256, (3, 3), strides=(2,2))) #2D Convolution Layer\nmodel.add(tf.keras.layers.Dropout(0.5)) #Dropout\nmodel.add(tf.keras.layers.Flatten()) #Flatten the 'squared' matrix to a (1,784) vector \nmodel.add(tf.keras.layers.Dense(128,activation='relu')) #Dense Layer with relu activation\nmodel.add(tf.keras.layers.Dense(10, activation='softmax')) #Dense Layer with softmax activation so it can predict one of the 10 Labels\n\nmodel.compile(loss=tf.keras.losses.categorical_crossentropy,\n              optimizer=tf.keras.optimizers.Adadelta(),\n              metrics=['accuracy'])\nprint(model.summary())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a2bde0d4efe21dd73724fd709467a57ddd846714"},"cell_type":"code","source":"#Train the model\ntensorboard = TensorBoard(log_dir=\"logs/{}\".format(time()))\nmodel.fit(train_x, train_y,\n          batch_size=1000,\n          epochs=10,\n          verbose=1,\n          validation_data=(dev_x, dev_y),\n          callbacks=[tensorboard])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"5eb1b78ca6ee7627e608c5044f868dd9a5d596de"},"cell_type":"code","source":"#Predict on the test set\nprediction=model.predict(test_x)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"1b44566800acbac54c4582d4d59ec1afd459c752"},"cell_type":"code","source":"#Save results\nfinal=pd.DataFrame(np.array(prediction.argmax(axis=1)),columns=['Label'])\nfinal.index += 1 \nfinal.index.names = ['ImageId']\nfinal.to_csv(\"result.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"9bc3ec55fe4f654753b9c2b52cd974bf2ceeb12d"},"cell_type":"code","source":"","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}