{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport keras\nfrom keras.models import Model\nfrom keras.layers import *\nfrom keras import optimizers\nimport tensorflow as tf","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv('../input/train.csv')\ndf_test = pd.read_csv('../input/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(df_train.shape)\n#42000 rows and 785 columns\nprint(df_test.shape)\n#28000 rows in test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train.head()\n#784 features and 1 label ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#iloc The iloc indexer for Pandas Dataframe is used for integer-location based indexing / selection by position\n#iloc basically used for dataframe slicing\ndf_features = df_train.iloc[:, 1:785]\nprint(df_features.shape)\n\n#extracting al lables tha contains our actual data\ndf_label = df_train.iloc[:, 0]\nprint(df_label.shape)\n\nX_test = df_test.iloc[:, 0:784]\n\nprint(X_test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#splitting data into train and test\nfrom sklearn.model_selection import train_test_split\nX_train,X_val,y_train,y_val=train_test_split(df_features,df_label,\n                                          test_size=0.2,\n                                          random_state=1212)\n\nX_train = X_train.as_matrix().reshape(33600, 784) #(33600, 784)\nX_val = X_val.as_matrix().reshape(8400, 784) #(8400, 784)\n\nX_test = X_test.as_matrix().reshape(28000, 784)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train=tf.keras.utils.normalize(X_train,axis=1)\nX_test=tf.keras.utils.normalize(X_test,axis=1)\nprint((min(X_train[1]), max(X_train[1])))\n#normalizing the values same as above code\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#convert labels to one hot encoders\nnum_digits = 10\n#Converts a class vector (integers) to binary class matrix.\ny_train = keras.utils.to_categorical(y_train, num_digits)\ny_val = keras.utils.to_categorical(y_val, num_digits)\n\nprint(y_train[2])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Model fitting \n#building a neural network of 5 layers\nmodel=tf.keras.models.Sequential()\n#creating input layer\n#model.add(tf.keras.layers.Flatten())\n\n#hidden layers creation\nmodel.add(tf.keras.layers.Dense(300,activation=tf.nn.relu))\nmodel.add(tf.keras.layers.Dense(200,activation=tf.nn.relu))\nmodel.add(tf.keras.layers.Dense(200,activation=tf.nn.relu))\nmodel.add(tf.keras.layers.Dense(200,activation=tf.nn.relu))\nmodel.add(tf.keras.layers.Dense(100,activation=tf.nn.relu))\n\n#output layer\nmodel.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"training_epochs = 30\nmodel.compile(loss='categorical_crossentropy',\n              optimizer='adam',\n              metrics=['accuracy'])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"training_model = model.fit(X_train, y_train,\n                     epochs = training_epochs,\n                     verbose = 2,\n                     validation_data=(X_val, y_val))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions=model.predict(X_test)\nprint(predictions)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(np.argmax(predictions[11]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#pd.dataframe converts output to a dataframe\npred = pd.DataFrame(model.predict(X_test))\npred = pd.DataFrame(pred.idxmax(axis = 1))\npred.index.name = 'ImageId'\npred = pred.rename(columns = {0: 'Label'}).reset_index()\npred['ImageId'] = pred['ImageId'] + 1\n\npred.head(20)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred.to_csv('final_submission.csv', index = False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"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.7.3"}},"nbformat":4,"nbformat_minor":1}