{"cells":[{"metadata":{"id":"zL_wR6scz4om","trusted":false},"cell_type":"code","source":"#This model was trained on google colab so the cell outputs are not visible here.\n\n\n#Go to https://colab.research.google.com/drive/1qGw8XtxRPir7stp-awqHBbd2XEpzC3AY?usp=sharing\n\n\n\nimport pandas as pd\nimport numpy as np\nimport os","execution_count":null,"outputs":[]},{"metadata":{"id":"XJ5dUVMP5tV9","trusted":false},"cell_type":"code","source":"from tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Dense,Dropout, Flatten\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras import optimizers","execution_count":null,"outputs":[]},{"metadata":{"id":"T7HpXQUIukQo","outputId":"79545498-f9aa-4323-9246-8ae7c01c1420","trusted":false},"cell_type":"code","source":"from google.colab import files\nuploaded = files.upload()","execution_count":null,"outputs":[]},{"metadata":{"id":"R0FmfwMjcWKf","outputId":"5889ba28-d859-4e12-e5d8-548373ce9faf","trusted":false},"cell_type":"code","source":"optimizers.SGD(learning_rate=0.01, momentum=0.9, nesterov=True, name='SGD')","execution_count":null,"outputs":[]},{"metadata":{"id":"25ZOClH87ouF","trusted":false},"cell_type":"code","source":"import zipfile\nimport io\nzf = zipfile.ZipFile(io.BytesIO(uploaded['Train.zip']), \"r\")\nzf.extractall()","execution_count":null,"outputs":[]},{"metadata":{"id":"dflOCTpc3coM","trusted":false},"cell_type":"code","source":"train_dir='/content/Train/Train'\nval_dir='/content/Train/val'","execution_count":null,"outputs":[]},{"metadata":{"id":"JI5fooIg3hx_","outputId":"b3c0f52f-4ea1-414e-e85e-a0c188ba7d29","trusted":false},"cell_type":"code","source":"print(len(os.listdir(train_dir)))\nprint(len(os.listdir(val_dir)))","execution_count":null,"outputs":[]},{"metadata":{"id":"yG_tWLsN3pth","trusted":false},"cell_type":"code","source":"from tensorflow.keras.applications.inception_v3 import InceptionV3","execution_count":null,"outputs":[]},{"metadata":{"id":"4pi91ipiQvgP","trusted":false},"cell_type":"code","source":"model=InceptionV3(include_top=False,weights='imagenet',input_shape=(224,224,3),classes=45)","execution_count":null,"outputs":[]},{"metadata":{"id":"6YTActq3RAIg","trusted":false},"cell_type":"code","source":"for layer in model.layers[0:7]:\n  layer.trainable = False\nfor layer in model.layers[8:]:\n  layer.trainable=True","execution_count":null,"outputs":[]},{"metadata":{"id":"SJapSK9V32c5","trusted":false},"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1./255,\n                                   rotation_range=30,\n                                   width_shift_range=0.2,\n                                   height_shift_range=0.2,\n                                   zoom_range=0.1,\n                                   shear_range=0.1,\n                                   horizontal_flip=True)\nval_datagen=ImageDataGenerator(rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"id":"9AVCsPd54nST","outputId":"05fe9be2-56c4-49ca-bd79-896b7b3f10b4","trusted":false},"cell_type":"code","source":"train_generator=train_datagen.flow_from_directory(train_dir,\n                                                  class_mode='categorical',\n                                                  target_size=(224,224),\n                                                  batch_size=25,\n                                                  color_mode='rgb',\n                                                  shuffle = True,\n                                                  seed=42)\nval_generator=val_datagen.flow_from_directory(val_dir,\n                                              class_mode='categorical',\n                                              target_size=(224,224),\n                                              batch_size=10,\n                                              color_mode='rgb',\n                                              shuffle = True,\n                                              seed=42\n                                              )","execution_count":null,"outputs":[]},{"metadata":{"id":"vCWeQ281bBKd","trusted":false},"cell_type":"code","source":"steps_train=train_generator.n//train_generator.batch_size\nsteps_val=val_generator.n//val_generator.batch_size","execution_count":null,"outputs":[]},{"metadata":{"id":"y0nSF-Ig422S","trusted":false},"cell_type":"code","source":"x=Flatten()(model.output)\nx=Dense(2048,activation='relu')(x)\nx=Dropout(0.5)(x)\npred=Dense(45,activation='softmax')(x)\nmodel_tr = Model(model.input,pred)\n","execution_count":null,"outputs":[]},{"metadata":{"id":"OTcF2sPc6uIZ","trusted":false},"cell_type":"code","source":"model_tr.compile(optimizer='SGD', loss='categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"id":"KDa6fyvtU5Tf","trusted":false},"cell_type":"code","source":"from tensorflow.keras.callbacks import Callback","execution_count":null,"outputs":[]},{"metadata":{"id":"DoRESXm6QY1U","trusted":false},"cell_type":"code","source":"class myCallback(Callback): \n    def on_epoch_end(self, epoch, logs={}): \n        if(logs.get('val_accuracy') > 0.93 ):    \n          self.model.stop_training = True\ncallbacks = myCallback()","execution_count":null,"outputs":[]},{"metadata":{"id":"SS0e2H188sso","outputId":"713a7860-fa54-4509-ee0f-f1ee8afa6167","trusted":false},"cell_type":"code","source":"history=model_tr.fit_generator(\n    train_generator,\n    steps_per_epoch=steps_train,\n    validation_data=val_generator,\n    validation_steps=steps_val,\n    epochs=50,\n    callbacks=[callbacks]\n)\n","execution_count":null,"outputs":[]},{"metadata":{"id":"EvFQctsaNlXy","trusted":false},"cell_type":"code","source":"from google.colab import drive\ndrive.mount('/content/drive')","execution_count":null,"outputs":[]},{"metadata":{"id":"ZrV6xft39HMF","trusted":false},"cell_type":"code","source":"test_dir='/content/drive/My Drive/car_classification/Test/Test1'","execution_count":null,"outputs":[]},{"metadata":{"id":"5C22D_eo04D1","trusted":false},"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import load_img,img_to_array","execution_count":null,"outputs":[]},{"metadata":{"id":"2uQZzQBJ1BRj","outputId":"ced36c38-a7c8-4aff-cbc0-e5522510495a","trusted":false},"cell_type":"code","source":"image=load_img(os.path.join(test_dir,'image'+str(20)+'.jpg'),\n                   grayscale=False,\n                   color_mode=\"rgb\",\n                   target_size=(224,224))\nimage","execution_count":null,"outputs":[]},{"metadata":{"id":"oRvbMaA-1GHb","trusted":false},"cell_type":"code","source":"input_arr = img_to_array(image)\ninput_arr = np.array([input_arr],np.float32)/255","execution_count":null,"outputs":[]},{"metadata":{"id":"x3DYQIci1JBv","outputId":"af32841c-ae9b-411a-a433-00b8bbdcbe68","trusted":false},"cell_type":"code","source":"np.argmax(model_tr.predict(input_arr))","execution_count":null,"outputs":[]},{"metadata":{"id":"3_m3cSRL2AJ-","trusted":false},"cell_type":"code","source":"pred1=[]\nfor i in range(0,450):\n  image=load_img(os.path.join(test_dir,'image'+str(i+1)+'.jpg'),\n                   grayscale=False,\n                   color_mode=\"rgb\",\n                   target_size=(224,224))\n  input_arr = img_to_array(image)\n  input_arr = np.array([input_arr],np.float32)/255\n  pred1.append(np.argmax(model_tr.predict(input_arr)))","execution_count":null,"outputs":[]},{"metadata":{"id":"zQPkvoMQIaeT","trusted":false},"cell_type":"code","source":"labels = (train_generator.class_indices)\nlabels = dict((v,k) for k,v in labels.items())\npredictions1 = [labels[k] for k in pred1]","execution_count":null,"outputs":[]},{"metadata":{"id":"AbkeQMJvIuQZ","outputId":"3f982585-9c6a-4505-d6a4-db5de9e9d05a","trusted":false},"cell_type":"code","source":"for i in range(0,450):\n  print(predictions1[i],i+1)","execution_count":null,"outputs":[]},{"metadata":{"id":"MXef3Ae-Fz-d","trusted":false},"cell_type":"code","source":"df=pd.read_csv('/content/drive/My Drive/car_classification/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"id":"IXjdvlgOVVTu","outputId":"d5e25794-ca02-4898-93f6-12f490c91a25","trusted":false},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"g6_RfN82LanV","outputId":"989e4fba-26b2-4501-d4a9-afc324d0d449","trusted":false},"cell_type":"code","source":"df.drop('predictions',axis=1)","execution_count":null,"outputs":[]},{"metadata":{"id":"hsm2UDBhLmQ9","trusted":false},"cell_type":"code","source":"df['predictions']=pred1","execution_count":null,"outputs":[]},{"metadata":{"id":"xTjDVwG8LrFj","outputId":"60c7cd7f-f4e0-4b38-c4a8-a4f0d8409a3c","trusted":false},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{"id":"L98dbG0_LsVN","trusted":false},"cell_type":"code","source":"df.to_csv(\"results_new1.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{"id":"GK3hVXoxRFBy","outputId":"d8754a82-65b0-4b92-eab5-a49eebc10bb3","trusted":false},"cell_type":"code","source":"%matplotlib inline\nimport matplotlib.pyplot as plt\nacc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\n\nepochs = range(len(acc))\n\nplt.plot(epochs, acc, 'r', label='Training accuracy')\nplt.plot(epochs, val_acc, 'b', label='Validation accuracy')\nplt.title('Training and validation accuracy')\nplt.legend()\nplt.figure()\n\nplt.plot(epochs, loss, 'r', label='Training Loss')\nplt.plot(epochs, val_loss, 'b', label='Validation Loss')\nplt.title('Training and validation loss')\nplt.legend()\n\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"id":"sIwOQk3dRQZ7","trusted":false},"cell_type":"code","source":"model_tr.save('Inception_model.h5')","execution_count":null,"outputs":[]},{"metadata":{"id":"vOScSxC9S1fS","trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}