{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"%matplotlib inline\nimport numpy as np\nimport pandas as pd\nimport datetime as dt\nimport matplotlib.pyplot as plt\nfrom mpl_toolkits.axes_grid1 import ImageGrid\nfrom os import listdir, makedirs\nfrom tqdm import tqdm\n\nfrom sklearn.model_selection import train_test_split\n\nfrom keras.models import Sequential\nfrom keras import optimizers\nfrom keras.layers import Dense, Activation,Dropout, Conv2D,Flatten,BatchNormalization,MaxPooling2D\nfrom keras.utils import to_categorical","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"Path = '../input/'\nprint(listdir(f'{Path}'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2ca25469bfad91e41423bad61e089e29241fd3b5"},"cell_type":"code","source":"train = pd.read_csv(f'{Path}/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4ede10539556a405f518db2e21d2fbd9c6eaf925"},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a9b6d200e55d193f476de4f38cd01fc7b3eda9f8"},"cell_type":"code","source":"plt.imshow(np.array(train.drop(['label'],axis =1).iloc[3]).reshape(28,28))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5af9ce3cee81bf821b75ba5972e3490f702b8af7"},"cell_type":"code","source":"test = pd.read_csv(f'{Path}/test.csv');test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0d00a1f960bec48bfb8e7dca261012ff20a74926"},"cell_type":"code","source":"train, valid = train_test_split(train, test_size=0.2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":false,"_uuid":"4425254f96750dfba96fac10f16692c89598b557"},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"15a798af60d3e6d0c4771d185e711893dc82f516"},"cell_type":"code","source":"valid.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"401ff6932d23a0667f86d7cf5f06c107b9b385b5"},"cell_type":"code","source":"y = to_categorical(train.label)\nvalid_y = to_categorical(valid.label)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7aa08e02d3f3d9d10244ac697c50170f68de7a49"},"cell_type":"code","source":"y","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c6269da41fc03840492db492ed689fa56c229a9a"},"cell_type":"code","source":"train.drop(['label'],inplace = True,axis = 1)\nvalid.drop(['label'],inplace = True,axis =1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"242b7f9b3f7d264eede8b071d77e0c776db0cd88"},"cell_type":"code","source":"#Normalize \ntrain = train/255\nvalid = valid/255\ntest = test/255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"da4a1d767fc174a4dd65afc19c58d4fa42e29140"},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f67cefdb6f50a49193f43289044305141690a070"},"cell_type":"code","source":"#Dense Neural Network\nmodel = Sequential()\nmodel.add(Dense(1024, input_shape=(784,)))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.1))\n\nmodel.add(Dense(512))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.1))\n\nmodel.add(Dense(256))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.1))\nmodel.add(Dense(10, activation='softmax'))\nmodel.summary()\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a950d8b2779413d7cbd57975ea19c5b7ff6b0560"},"cell_type":"code","source":"sgd = optimizers.SGD(lr=0.001, momentum=0.00, decay=0.00, nesterov=False)\nmodel.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['acc'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e2a147cf53b664aa3b116971e196cf4d730e1d67"},"cell_type":"code","source":"def fit(epoch = 10):\n    model.fit(x=train, y=y, batch_size=64, epochs=epoch, verbose=1, callbacks=None, validation_data=(valid,valid_y), shuffle=False, class_weight=None, sample_weight=None, initial_epoch=0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"85f92e3b0e64af27e4ba4cf419a18ce3db007589"},"cell_type":"code","source":"fit(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":false,"_uuid":"88492b226b2f55e85c2ab894acf5ddbbdc4891f7"},"cell_type":"code","source":"score_train = model.evaluate(train, y, verbose=0)\nscore_valid = model.evaluate(valid, valid_y, verbose=0)\nprint('Train Score : {}  Validation Score  :  {}'.format(score_train,score_valid))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"19ad07f627afe47fa8df4c767e2598bd6aa5c702"},"cell_type":"code","source":"fit(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"111df8a3bf6d81fba5da4b1e37be8b747bbbd037"},"cell_type":"code","source":"fit(5)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"55a9ff26423d0c526344ac35789f8608dccc9d79"},"cell_type":"markdown","source":"# CNN"},{"metadata":{"trusted":true,"_uuid":"d8d769a700497bc0cc6115ec7328e6f5260974a0"},"cell_type":"code","source":"train_cnn = np.array(train).reshape(-1,28,28,1)\nvalid_cnn = np.array(valid).reshape(-1,28,28,1)\ntest_cnn = np.array(test).reshape(-1,28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"893b2df2a1779522f7cf42ac291821fdc979fde9"},"cell_type":"code","source":"fig, ax = plt.subplots(1,2)\nax[0].imshow(np.array(train)[0].reshape(28,28))\nax[1].imshow(train_cnn[0].reshape(28,28))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"992112a5cef321daf975ec382ecb3614abb78c8a"},"cell_type":"markdown","source":"# CNN Model\n"},{"metadata":{"trusted":true,"_uuid":"008d0c07a84759ab4ab03da1a801657dd9be4036"},"cell_type":"code","source":"model_cnn = Sequential()\n\nmodel_cnn.add(Conv2D(32, (3, 3), input_shape=(28,28,1)))\nmodel_cnn.add(BatchNormalization(axis=-1))\nmodel_cnn.add(Activation('relu'))\nmodel_cnn.add(Conv2D(32, (3, 3)))\nmodel_cnn.add(BatchNormalization(axis=-1))\nmodel_cnn.add(Activation('relu'))\nmodel_cnn.add(MaxPooling2D(pool_size=(2,2)))\n\nmodel_cnn.add(Conv2D(64,(3, 3)))\nmodel_cnn.add(BatchNormalization(axis=-1))\nmodel_cnn.add(Activation('relu'))\nmodel_cnn.add(Conv2D(64, (3, 3)))\nmodel_cnn.add(BatchNormalization(axis=-1))\nmodel_cnn.add(Activation('relu'))\nmodel_cnn.add(MaxPooling2D(pool_size=(2,2)))\n\nmodel_cnn.add(Flatten())\nmodel_cnn.add(Dense(512,activation='relu'))\n\nmodel_cnn.add(Dense(10,activation='softmax'))\nmodel_cnn.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e211515959a036020d2459b58a93314bcdac9d00"},"cell_type":"code","source":"sgd = optimizers.SGD(lr=0.01, momentum=0.00, decay=0.00, nesterov=False)\nmodel_cnn.compile(optimizer=sgd, loss=\"categorical_crossentropy\", metrics=['acc'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d610fd8b3d792341786de868a56e938975b54423"},"cell_type":"code","source":"def fit_cnn(epoch = 10):\n    model_cnn.fit(x=train_cnn, y=y, batch_size=64, epochs=epoch, verbose=1, callbacks=None, validation_data=(valid_cnn,valid_y), shuffle=False, class_weight=None, sample_weight=None, initial_epoch=0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2f82cfd7203b23dc5c7014a3cc12b5a6866f3534"},"cell_type":"code","source":"fit_cnn(10)","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}