{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport matplotlib.pyplot as plt\n\nfrom sklearn.preprocessing import OneHotEncoder,LabelEncoder\n\nfrom keras.layers import Conv2D, Dense, Dropout, AveragePooling2D, MaxPool2D, BatchNormalization, Activation, Flatten\nfrom keras.models import Sequential\nfrom keras.optimizers import Adam\n\nfrom keras.preprocessing import image\nfrom keras.applications.imagenet_utils import preprocess_input\n\nimport os\nprint(os.listdir(\"../input\"))\n\n%matplotlib inline\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":"train_dir = \"../input/train/\"\ntest_dir = \"../input/test/\"\n\nsample_submission = pd.read_csv(\"../input/sample_submission.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0a743e4d1eee2ede669a1c5332699e28d6076cd8"},"cell_type":"code","source":"# display the train image\ntrain_img_list = os.listdir(train_dir) \n\nprint(\"No of images = \"+str(len(train_img_list)))\n\nimg = plt.imread(train_dir+train_img_list[0])\nplt.imshow(img)\n#print(img.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4422cd52ee87f9a02d023066efb8a3dede998067"},"cell_type":"code","source":"# display the train image\ntest_img_list = os.listdir(test_dir) \n\nprint(\"No of images = \"+str(len(test_img_list)))\n\nimg = plt.imread(test_dir+test_img_list[0])\nplt.imshow(img)\n#print(img.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f234c7634a2ba47f5720f4693d35a4e8c75400aa"},"cell_type":"code","source":"# train.csv\ntrain_df = pd.read_csv(\"../input/train.csv\")\n\nprint(\"train.csv shape = \"+str(train_df.shape))\n\ntrain_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7f6936c0a6ac40007e8889528977f8f6b15e62ee"},"cell_type":"code","source":"# unique ids - also includes \"new values\" \nids = train_df[\"Id\"]\nids.value_counts().shape[0]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2ce5430f5c58392377c4c5b7473e862a3046293c"},"cell_type":"code","source":"# image preprocessing \ndef preprocessing(dir_name,image_list):\n    print(\"Preprocessing \"+dir_name)\n    m = len(image_list)\n    \n    X = np.zeros((m,100,100,3))\n    \n    count = 0\n    for img_name in image_list:\n        img = image.load_img(path=dir_name+img_name,target_size=(100,100,3)) #images may have different size hence compressing into same size\n        img = image.img_to_array(img)\n        img = preprocess_input(img)\n        X[count] = img\n    \n        \n        if count%1000 == 0:\n            print(\"Preprocessing \"+str(count))\n        count += 1\n    return X","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b8a6840ae7c9b4494fb64501fc02fd912c2540aa","scrolled":true},"cell_type":"code","source":"x_train = preprocessing(train_dir,train_df[\"Image\"])\n# x_test = preprocessing(test_dir,sample_submission[\"Image\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"825fb5bf8d0e1a2e8eb78ecf2f4be69fbad454a1"},"cell_type":"code","source":"def label_preprocessing(y):\n    label_encoder = LabelEncoder() #to convert string labels to integer\n    label_encoder.fit(y)\n    labels_encoded = label_encoder.transform(y)\n    # print(labels_encoded.shape)\n    \n    one_hot_encoder = OneHotEncoder(sparse=False)\n    one_hot_encoder.fit(labels_encoded.reshape(-1,1))\n    one_hot_encoded = one_hot_encoder.transform(labels_encoded.reshape(-1,1))\n    \n    # print(one_hot_encoded.shape)\n    \n    y = one_hot_encoded\n    \n    return y, label_encoder","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1ceeb134b84bac29fcafdb2c13b0540ba2cda145"},"cell_type":"code","source":"label_encoder = None\ny_train, label_encoder = label_preprocessing(train_df[\"Id\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"af5f8260d3b859af616959791d47780331d64a52"},"cell_type":"code","source":"x_train = x_train/255.0\n# x_test = x_test/255.0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cf9dbf5557f73ff6ba10b269d251308efe3cfdac"},"cell_type":"markdown","source":"### Model - CNN"},{"metadata":{"trusted":true,"_uuid":"d59dc5c2d0a586fdf298a560295184c47ec9c572"},"cell_type":"code","source":"model = Sequential()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4eaedb3ad0672fbbb6fad5de33b46d58d5d9eb16"},"cell_type":"code","source":"model.add(Conv2D(filters=32,kernel_size=(7,7),name=\"conv0\",input_shape=(100,100,3)))\nmodel.add(BatchNormalization(name=\"batch0\"))\nmodel.add(Activation(activation='relu'))\n\nmodel.add(MaxPool2D(pool_size=(2,2),name=\"max0\"))\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),name=\"conv1\"))\nmodel.add(Activation(activation='relu'))\nmodel.add(AveragePooling2D(pool_size=(3,3),name=\"avg0\"))\n\nmodel.add(Flatten())\nmodel.add(Dense(units=1000,activation=\"relu\",name=\"dense0\"))\nmodel.add(Dropout(rate=0.8))\nmodel.add(Dense(units=y_train.shape[1],activation=\"softmax\",name=\"dense1\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c136714fa0f429e8761fba1abe4de019e4fc8442"},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d184e901f280ad5700d9507b51ac8767b7d29cfb"},"cell_type":"code","source":"adam = Adam()\nmodel.compile(optimizer=adam,loss=\"categorical_crossentropy\",metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"170dbfe79804b4d6ed1d09e922a8b0a7ff76ebe6"},"cell_type":"code","source":"history = model.fit(x_train,y_train,epochs=100, batch_size=100, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bd5d6edceb7b636fdfe59973a4f164e076f0f399"},"cell_type":"code","source":"plt.plot(history.history['acc'])\nplt.title('Model accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c7fb70cc9d87d1ad6c75464b451bad2e6dd29002"},"cell_type":"code","source":"x_test = preprocessing(test_dir,sample_submission[\"Image\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1832c44b17cb03fa7847ba1b734cb39a45d278e4"},"cell_type":"code","source":"x_test = x_test/255.0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a561b2a67441f2e251f55191649d70bb4b25d5eb"},"cell_type":"code","source":"predictions = model.predict(np.array(x_test), verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8679fd4d936357004046e11104e4a111e181486e"},"cell_type":"code","source":"col = ['Image']\ntest_df = pd.DataFrame(sample_submission[\"Image\"], columns=col)\ntest_df['Id'] = ''\nfor i, pred in enumerate(predictions):\n    test_df.loc[i, 'Id'] = ' '.join(label_encoder.inverse_transform(pred.argsort()[-5:][::-1]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c08f3a16f956a67c80b1d7c638854e30cadf7309"},"cell_type":"code","source":"test_df.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3c275974d273b6ffb6b82c20a55740a28ccd8f33"},"cell_type":"code","source":"test_df.to_csv(\"submission1.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1e920a61b116200aca92b234794f822128941f30"},"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}