{"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":"markdown","source":"# Dog Breed Classification using Transfer Learning  ","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np \nimport pandas as pd\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Flatten, GlobalAveragePooling2D, Activation, Flatten, Dropout, BatchNormalization\nfrom tensorflow.keras import optimizers, regularizers\nfrom tensorflow.keras.applications import InceptionResNetV2\nfrom tensorflow.keras.applications.inception_resnet_v2 import preprocess_input\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.optimizers import SGD \nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.status.busy":"2021-07-08T12:42:19.199071Z","iopub.execute_input":"2021-07-08T12:42:19.199379Z","iopub.status.idle":"2021-07-08T12:42:19.221353Z","shell.execute_reply.started":"2021-07-08T12:42:19.199327Z","shell.execute_reply":"2021-07-08T12:42:19.220734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df=pd.read_csv('../input/labels.csv')\ntest_df=pd.read_csv('../input/sample_submission.csv')\nimage_size = 299","metadata":{"_uuid":"1395387c3341d53e9ca207245c9d8ff8d5492f10","execution":{"iopub.status.busy":"2021-07-08T12:42:19.223284Z","iopub.execute_input":"2021-07-08T12:42:19.223691Z","iopub.status.idle":"2021-07-08T12:42:19.808561Z","shell.execute_reply.started":"2021-07-08T12:42:19.223534Z","shell.execute_reply":"2021-07-08T12:42:19.807815Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Loading Model and Pretrained Weights","metadata":{}},{"cell_type":"code","source":"model = Sequential()\nmodel.add(InceptionResNetV2(include_top=False, pooling='avg', weights=\"imagenet\"))\nmodel.add(Dense(512))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.8))\nmodel.add(Dense(120, activation='softmax'))\nmodel.layers[0].trainable = False\nmodel.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"_uuid":"78cba25909a86a4d574e699d4e95b1062f5db538","execution":{"iopub.status.busy":"2021-07-08T12:42:19.810671Z","iopub.execute_input":"2021-07-08T12:42:19.810945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Data Generator ","metadata":{}},{"cell_type":"code","source":"\n# creating data generator \ndatagen = ImageDataGenerator(preprocessing_function=preprocess_input, rescale=1./255., horizontal_flip=True,width_shift_range = 0.2,height_shift_range = 0.2,validation_split=0.15)\n\n#train generator \ntrain_generator=datagen.flow_from_dataframe(dataframe=df,directory=\"../input/train/\",x_col=\"id\",y_col=\"breed\",has_ext=False,subset=\"training\",batch_size=16,seed=1997,shuffle=True,class_mode=\"categorical\",target_size=(image_size, image_size))\n\n#test generator \nvalid_generator=datagen.flow_from_dataframe(dataframe=df,directory=\"../input/train/\",x_col=\"id\",y_col=\"breed\",has_ext=False,subset=\"validation\",batch_size=1,seed=1997,shuffle=True,class_mode=\"categorical\",target_size=(image_size, image_size))\n\n#creating test generator \ntest_datagen=ImageDataGenerator(preprocessing_function=preprocess_input,rescale=1./255.)\n\n#train generator \ntest_generator=test_datagen.flow_from_dataframe(dataframe=test_df,directory=\"../input/test/\",x_col=\"id\",y_col=None,has_ext=False,batch_size=1,seed=42,shuffle=False,class_mode=None,target_size=(image_size, image_size))","metadata":{"_uuid":"20b5d2cdb5718bbf9122fdac8272c10dcfc084f5","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model Training","metadata":{}},{"cell_type":"code","source":"model.fit_generator(generator=train_generator,steps_per_epoch=train_generator.n,validation_data=valid_generator,validation_steps=train_generator.n,epochs=1)","metadata":{"_uuid":"1ae05aa2a5f25d39d576d2e1ef10a02b5b158d5d","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction ","metadata":{}},{"cell_type":"code","source":"pred=model.predict_generator(test_generator,verbose=1)","metadata":{"_uuid":"4a22b0a2c1e2173fd9327abf4dd78f58acf00ac0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Creating submission file for model evaluation ","metadata":{}},{"cell_type":"code","source":"labels = (train_generator.class_indices)\nlabels = list(labels.keys())\ndf = pd.DataFrame(data=pred,\n                 columns=labels)\n\ncolumns = list(df)\ncolumns.sort()\ndf = df.reindex(columns=columns)\n\nfilenames = test_df[\"id\"]\ndf[\"id\"]  = filenames\n\ncols = df.columns.tolist()\ncols = cols[-1:] + cols[:-1]\ndf = df[cols]\ndf.head(5)\n\ndf.to_csv(\"submission_InceptionResnet50.csv\",index=False)","metadata":{"_uuid":"05d7c646e1685870d859c113518de36ef3aae0b9","scrolled":true,"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]}]}