{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport matplotlib.image as mpimg\nimport seaborn as sns\n\nfrom tensorflow import keras\nimport tensorflow as tf\nfrom tensorflow.keras import Model,Input\nfrom tensorflow.keras.layers import Dense,Flatten,GlobalAveragePooling2D\n\nfrom tensorflow.keras.callbacks import EarlyStopping\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.callbacks import LearningRateScheduler,ReduceLROnPlateau\n\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.applications import MobileNetV2,EfficientNetB0,EfficientNetB4,Xception\n\nimport warnings\nimport glob\nwarnings.filterwarnings(\"ignore\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **MetaData**","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv(\"../input/be-honest-what-do-you-think-of-this-image/train.csv\")\ntest = pd.read_csv(\"../input/be-honest-what-do-you-think-of-this-image/test.csv\")\n\ntrain['Id'] = train['Id']+'.jpg'\ntest['Id'] = test['Id']+'.jpg'","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape , test.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### **Images in the Dataset**","metadata":{}},{"cell_type":"code","source":"paths = glob.glob(\"../input/be-honest-what-do-you-think-of-this-image/images/train/*.jpg\")\nplt.figure(figsize=(20, 20))\nfor i in range(28):\n    cur_img = mpimg.imread(paths[i]) \n    ax = plt.subplot(7, 7, i + 1)\n    plt.imshow(cur_img.astype(\"uint8\"))\n    plt.axis(\"off\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### **Checking for Image Coruption.......**","metadata":{}},{"cell_type":"code","source":"#c_i = []\n#print('Coruppted Images in the Dataset\\nChecking.......')\n#for i in paths:\n#    try:\n#        img = tf.keras.preprocessing.image.load_img(i, target_size=(2,2,1), color_mode='rgb', grayscale=False)\n#    except:\n#        c_i.append(i.split('/')[-1].split('.')[0])\n#        \n#print(\"Found \" + str(len(c_i)) +\" Image Coruppted\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"c_i = ['ccb7742b-9c6d-432b-8be4-59707b47fc8e',\n '425005ae-16df-4970-8937-e40084c26740',\n '499886e8-faf9-46ba-a699-f5491391f211',\n '11027b9d-5291-4ec5-baae-5ac30521d07f',\n '1d0f131e-48a5-4c0d-bd80-879411a35479',\n 'd039db7d-9100-4d66-a54f-5af698e3e632',\n '1d0bbec2-d5d7-45c6-b818-189add821279',\n '401acb59-5d5d-4d3e-a411-31dca0777a4e',\n 'e984f124-0f9c-4fc5-90cc-e2b58eeb35a1',\n '765b13a0-4def-4caf-b5be-f156458c7922',\n '299d68ed-e2d9-43ab-9d65-425d73be17f1',\n 'b7707a02-3672-41e4-995e-c980ce78752f',\n '314a7976-34b0-447b-9225-4b53fe113acf',\n 'c807f9af-44d5-4ef5-abdd-00199e946bc1',\n '39ad8a77-f082-41d1-a50f-97438aed1a08'] #Courupted Image Id's","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Removing\nfor j in c_i:\n    train.drop(train.loc[train['Id']==j+'.jpg'].index, inplace=True)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape , test.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Load Image Data**","metadata":{}},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1.0/255.0,validation_split=0.2)\n\ntest_datagen = ImageDataGenerator(rescale=1.0/255.0)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = train_datagen.flow_from_dataframe(train,directory=\"../input/be-honest-what-do-you-think-of-this-image/images/train\",subset=\"training\",\n                                               x_col=\"Id\",y_col=\"Interest\",target_size=(128, 128),batch_size=16,class_mode='raw')\n\nval_data = train_datagen.flow_from_dataframe(train,directory=\"../input/be-honest-what-do-you-think-of-this-image/images/train\",subset=\"validation\",\n                                               x_col=\"Id\",y_col=\"Interest\",target_size=(128, 128),batch_size=16,class_mode='raw')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0/255).flow_from_directory(\n    directory='../input/be-honest-what-do-you-think-of-this-image/images/test',target_size=(128, 128),batch_size=16,classes=['.'],shuffle=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for image_batch, labels_batch in train_data:\n    print(image_batch.shape)\n    print(labels_batch.shape)\n    break","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Main Model**","metadata":{}},{"cell_type":"code","source":"def build_model():\n    base = tf.keras.applications.Xception(weights=\"imagenet\", include_top=False, input_tensor=Input(shape=(128, 128, 3)))\n\n    base.trainable = False\n\n    flatten = base.output\n    flatten = Flatten()(flatten)\n\n    bboxHead = Dense(256, activation=\"relu\")(flatten)\n    bboxHead = Dense(128, activation=\"relu\")(bboxHead)\n    bboxHead = Dense(64, activation=\"relu\")(bboxHead)\n    bboxHead = Dense(32, activation=\"relu\")(bboxHead)\n    \n    bboxHead = Dense(1, activation=\"linear\")(bboxHead)\n\n    model = Model(inputs=base.input, outputs=bboxHead)\n    \n    return model","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = build_model()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Model Architecture**","metadata":{}},{"cell_type":"code","source":"model.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='mse', metrics=[tf.keras.metrics.RootMeanSquaredError()])\n\nsave_best = tf.keras.callbacks.ModelCheckpoint(\"Model.h5\", monitor='val_root_mean_squared_error',save_best_only=True, verbose=1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### **Training the Model**","metadata":{}},{"cell_type":"code","source":"model.fit(train_data, validation_data=val_data, epochs=30, callbacks=[save_best])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Loading the Best Model**","metadata":{}},{"cell_type":"code","source":"model = tf.keras.models.load_model('./Model.h5')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Predicting the Image Interet**","metadata":{}},{"cell_type":"code","source":"predict = model.predict(test_data, verbose=1).astype(float).round(2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Final Submission**","metadata":{}},{"cell_type":"code","source":"submission_file = pd.read_csv(\"../input/be-honest-what-do-you-think-of-this-image/sample_submission.csv\")\nsubmission_file['Interest'] = predict\nsubmission_file.to_csv('submission.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_file","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}