{"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\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 keras import Model\nfrom keras.layers import Conv2D, MaxPooling2D, Input, Dense, Flatten,Activation, Dropout\nfrom keras.optimizers import SGD, Adam\nfrom keras.models import Sequential\nimport keras\nimport keras.utils\nfrom keras.callbacks import ModelCheckpoint\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')\n\ntrain_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"269601110da1a59d9c84037e87f6a10b1fdfbf76"},"cell_type":"code","source":"# Basic info on Data Frame\ntrain_df.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"85cb77686067664641cce35b9b229e25310de156"},"cell_type":"code","source":"# Basic info on Data Frame\ntrain_df.describe()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"92621e0a8682e9ce4e11f439adb2b3b8c60256a6"},"cell_type":"code","source":"# Initialise input data for CNN\ninput_data = np.zeros((train_df.shape[0],28,28))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cb2697a5b293a807e2919f88854450568988984b"},"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":"7be351ec96b7d4a8eebc18cbcc865cfe0f3ebdcb"},"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    return arr.reshape(n_rows,-1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"091b5776d3c80f41304323470f52c22373ca1866"},"cell_type":"code","source":"train_np = train_df.drop('label',axis=1)\ntrain_np = train_np / 255\nfor i in range(train_df.shape[0]):\n    input_data[i] = conv_df_row_to_matrix(28, np.array(train_np.iloc[i]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"52c4963484605ef3ce569ac8d7b3809a8f6652c9"},"cell_type":"code","source":"X_train = input_data.reshape(input_data.shape[0],input_data.shape[1],input_data.shape[2],1)\nprint(X_train.shape)\nprint(Y_train.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8214ed787af04c99046c0f70791f6a20cb55d7a6"},"cell_type":"code","source":"input_img = Input(shape=(28, 28, 1))\n\n# Layer 1\nlayer1_tower_0 = Conv2D(16, (1, 1), padding='same', activation='relu')(input_img)\nlayer1_tower_1 = Conv2D(16, (1, 1), padding='same', activation='relu')(input_img)\nlayer1_tower_1 = Conv2D(16, (3, 3), padding='same', activation='relu')(layer1_tower_1)\n\nlayer1_tower_2 = Conv2D(16, (1, 1), padding='same', activation='relu')(input_img)\nlayer1_tower_2 = Conv2D(16, (5, 5), padding='same', activation='relu')(layer1_tower_2)\n\nlayer1_tower_3 = MaxPooling2D((3, 3), strides=(1, 1), padding='same')(input_img)\nlayer1_tower_3 = Conv2D(16, (1, 1), padding='same', activation='relu')(layer1_tower_3)\n\nlayer1_output = keras.layers.concatenate([layer1_tower_1, layer1_tower_2, layer1_tower_3, layer1_tower_0], axis=1)\n\n# Layer 2\nlayer2_tower_0 = Conv2D(16, (1, 1), padding='same', activation='relu')(layer1_output)\nlayer2_tower_1 = Conv2D(16, (1, 1), padding='same', activation='relu')(layer1_output)\nlayer2_tower_1 = Conv2D(16, (3, 3), padding='same', activation='relu')(layer2_tower_1)\n\nlayer2_tower_2 = Conv2D(16, (1, 1), padding='same', activation='relu')(layer1_output)\nlayer2_tower_2 = Conv2D(16, (5, 5), padding='same', activation='relu')(layer2_tower_2)\n\nlayer2_tower_3 = MaxPooling2D((3, 3), strides=(1, 1), padding='same')(layer1_output)\nlayer2_tower_3 = Conv2D(16, (1, 1), padding='same', activation='relu')(layer2_tower_3)\n\nlayer2_output = keras.layers.concatenate([layer2_tower_1, layer2_tower_2, layer2_tower_3, layer2_tower_0], axis=1)\n\n# Flatten & Dense\nlayer2_output = Flatten()(layer2_output)\noutput = Dense(10,activation='softmax')(layer2_output)\n\ninception_Model_datagen = Model(inputs=input_img,outputs=output)\ninception_Model = Model(inputs=input_img,outputs=output)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fd42642b3593bda911a1087d22e9763c2e303f15"},"cell_type":"code","source":"# checkpoint\nfilepath=\"model_acc.best.hdf5\"\ncheckpoint_acc = ModelCheckpoint(filepath, monitor='acc', verbose=1, save_best_only=True, mode='max')\n# Early Stopping\n#earlyStopping_acc = EarlyStopping(monitor='acc', min_delta=0, patience=10, verbose=0, mode='auto', baseline=None, restore_best_weights=True)\n\ncallbacks_list = [checkpoint_acc]\n\ninception_Model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])\nhistory_inception = inception_Model.fit(X_train,Y_train,batch_size=64,epochs=30,callbacks=callbacks_list)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a39a77dd6fda228195a4c6d996c41262bfff8425","_kg_hide-output":true,"_kg_hide-input":true},"cell_type":"code","source":"#test_df = pd.read_csv('../input/test.csv')\n#test_data = np.zeros((test_df.shape[0],28,28))\n#test_df = test_df / 255\n#for i in range(test_df.shape[0]):\n#    test_data[i] = conv_df_row_to_matrix(28, np.array(test_df.iloc[i]))\n    \n#X_test = test_data.reshape(test_data.shape[0],test_data.shape[1],test_data.shape[2],1)    \n\n#results = inception_Model.predict(X_test)\n# select the indix with the maximum probability\n#results = np.argmax(results,axis = 1)\n#results = pd.Series(results,name=\"Label\")\n\n#submission = pd.concat([pd.Series(range(1,test_data.shape[0]+1),name = \"ImageId\"),results],axis = 1)\n#submission.to_csv(\"cnn_mnist_current.csv\",index=False)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e13e5d8dda36ce551b025f5748c85a016aee495c"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2a7bcbe55a26fb7d8f430a27bf8b82e647b86ab7"},"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}