{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","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\nfrom keras.layers import Conv2D, MaxPooling2D, Input, Dense, Flatten,Activation, AveragePooling2D\nfrom keras.optimizers import SGD, Adam\nfrom keras.models import Sequential\nfrom keras.layers.normalization import BatchNormalization\nimport numpy as np\nimport keras\nimport keras.utils\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping\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\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"# load the data in Data Frame\ntrain_df = pd.read_csv('../input/train.csv')\ntrain_df.head()\n\n# Basic info on Data Frame\ntrain_df.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"27c5f6d38d8640f3a7c1606baaccb36bc2a080b3"},"cell_type":"code","source":"# Initialise input data for CNN\ninput_data = np.zeros((train_df.shape[0],28,28))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"573f0b4a29b1e7582c0c05ee490b0216ec66491e"},"cell_type":"code","source":"# Getting Label from data Frame to np.array\nY_train = np.array(train_df['label'])\nY_train = keras.utils.to_categorical(Y_train, 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8d790ab97a296086aee7834c5ba9fdd4db47921f"},"cell_type":"code","source":"# method to convert an DataFrame row to matrix of n_rows\ndef conv_df_row_to_matrix(n_rows,arr):\n    arr = arr / 255\n    return arr.reshape(n_rows,-1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fd2061700987fc6b27480da0111b10f7d42357d6"},"cell_type":"code","source":"# drop column label from data Frame \ntrain_np = train_df.drop('label',axis=1)\nfor i in range(train_df.shape[0]):\n    input_data[i] = conv_df_row_to_matrix(28, np.array(train_np.iloc[i]))\n    \nX_train = input_data.reshape(input_data.shape[0],input_data.shape[1],input_data.shape[2],1)    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a230130555fdc781c0320c4ab3d8bd11175a8f7b"},"cell_type":"code","source":"print(X_train.shape)\nprint(Y_train.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e49acf0396d09af62c3b7bcb15ba3bccf6b36107"},"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(32,(3,3), input_shape=(28,28,1), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(Conv2D(32,(3,3), input_shape=(28,28,1), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(MaxPooling2D(pool_size=(2,2)))\n\nmodel.add(Conv2D(64,(3,3), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(Conv2D(64,(3,3), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(AveragePooling2D(pool_size=(2)))\n\nmodel.add(Conv2D(128,(3,3), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(Conv2D(128,(3,3), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(MaxPooling2D(pool_size=(2,2)))\n\nmodel.add(Conv2D(256,(3,3), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(Conv2D(256,(3,3), padding='same'))\nmodel.add(BatchNormalization(axis=3))\nmodel.add(Activation('relu'))\n\nmodel.add(AveragePooling2D(pool_size=(2,2)))\n\nmodel.add(Flatten())\nmodel.add(Dense(10, activation='softmax'))\n\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aed227e87d64df0b61ccdc4400b73acdd3545080"},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy',optimizer='sgd', metrics=['accuracy'])\n\nfilepath_val_acc=\"model_cnn_acc.best.hdf5\"\ncheckpoint_val_acc = ModelCheckpoint(filepath_val_acc, monitor='acc', verbose=1, save_best_only=True, mode='max')\ncallbacks_list = [checkpoint_val_acc]\n\nhistory = model.fit(X_train,Y_train,batch_size=64,epochs=30,callbacks=callbacks_list)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"353134ba8eddc810168bfe616b7cf5a6f0e38d92"},"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}