{"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":"from tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.applications import EfficientNetB4\nfrom tensorflow.keras.layers import AveragePooling2D\nfrom tensorflow.keras.layers import Dropout\nfrom tensorflow.keras.layers import Flatten\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.applications.efficientnet import preprocess_input\nfrom tensorflow.keras.callbacks import EarlyStopping\nimport numpy as np\nimport os\nimport pandas as pd\n","metadata":{"execution":{"iopub.status.busy":"2022-03-19T08:23:10.218917Z","iopub.execute_input":"2022-03-19T08:23:10.219185Z","iopub.status.idle":"2022-03-19T08:23:12.386367Z","shell.execute_reply.started":"2022-03-19T08:23:10.219156Z","shell.execute_reply":"2022-03-19T08:23:12.385632Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"learning_rate = 0.003\nEPOCHS = 30\nBATCH_SIZE = 128\nIMG_SIZE = 380\ndatasets_path = '../input/dog-vs-cat-classification/train/train'","metadata":{"execution":{"iopub.status.busy":"2022-03-19T08:23:19.206115Z","iopub.execute_input":"2022-03-19T08:23:19.206804Z","iopub.status.idle":"2022-03-19T08:23:19.210761Z","shell.execute_reply.started":"2022-03-19T08:23:19.206762Z","shell.execute_reply":"2022-03-19T08:23:19.209818Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_generator = ImageDataGenerator(\n    rotation_range=30,\n    zoom_range=0.15,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    shear_range=0.15,\n    horizontal_flip=True,\n    fill_mode=\"nearest\",\n    preprocessing_function=preprocess_input,\n    validation_split=0.2)\n\ntrain_generator = data_generator.flow_from_directory(\n    datasets_path,\n    target_size=(IMG_SIZE, IMG_SIZE),\n    batch_size=BATCH_SIZE,\n    class_mode=\"categorical\",\n    shuffle=True,\n    subset='training')\n\n\nvalidation_generator = data_generator.flow_from_directory(\n    datasets_path,\n    target_size=(IMG_SIZE, IMG_SIZE),\n    batch_size=BATCH_SIZE,\n    class_mode=\"categorical\",\n    shuffle=False,\n    subset='validation')\n\ntest_datagen = ImageDataGenerator()\n","metadata":{"execution":{"iopub.status.busy":"2022-03-19T08:23:21.284932Z","iopub.execute_input":"2022-03-19T08:23:21.285206Z","iopub.status.idle":"2022-03-19T08:23:28.498054Z","shell.execute_reply.started":"2022-03-19T08:23:21.285176Z","shell.execute_reply":"2022-03-19T08:23:28.497277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = EfficientNetB4(weights=\"imagenet\", include_top=False, input_shape=(IMG_SIZE,IMG_SIZE,3),classes=2)\n\nfor layer in base_model.layers:\n        layer.trainable = False\n\nhead_model = base_model.output\nhead_model = AveragePooling2D(pool_size=(3,3))(head_model)\nhead_model = Flatten()(head_model)\nhead_model = Dense(128, activation=\"relu\")(head_model)\nhead_model = Dropout(0.4)(head_model)\nhead_model = Dense(64, activation=\"relu\")(head_model)\nhead_model = Dense(2, activation=\"softmax\")(head_model)\nmodel = Model(inputs=base_model.input, outputs=head_model)\nmodel.summary()\n\nopt = Adam(learning_rate=learning_rate)\nmodel.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])\n","metadata":{"execution":{"iopub.status.busy":"2022-03-19T08:23:31.651898Z","iopub.execute_input":"2022-03-19T08:23:31.652159Z","iopub.status.idle":"2022-03-19T08:23:36.444122Z","shell.execute_reply.started":"2022-03-19T08:23:31.652130Z","shell.execute_reply":"2022-03-19T08:23:36.443435Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nearly_stopping = EarlyStopping(\n    monitor='val_accuracy',\n    min_delta=0.0001,\n    patience=4,\n    verbose=1,\n    mode='max',\n    baseline=None,\n    restore_best_weights=True)\n","metadata":{"execution":{"iopub.status.busy":"2022-03-19T08:23:53.910989Z","iopub.execute_input":"2022-03-19T08:23:53.911254Z","iopub.status.idle":"2022-03-19T08:23:53.915367Z","shell.execute_reply.started":"2022-03-19T08:23:53.911225Z","shell.execute_reply":"2022-03-19T08:23:53.914702Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"H = model.fit(\n    train_generator,\n    steps_per_epoch=train_generator.samples // train_generator.batch_size,\n    callbacks=[early_stopping],\n    validation_data=validation_generator,\n    validation_steps=validation_generator.samples // validation_generator.batch_size,\n    epochs=EPOCHS)","metadata":{"execution":{"iopub.status.busy":"2022-03-19T08:23:56.006239Z","iopub.execute_input":"2022-03-19T08:23:56.007121Z","iopub.status.idle":"2022-03-19T10:25:01.021053Z","shell.execute_reply.started":"2022-03-19T08:23:56.007071Z","shell.execute_reply":"2022-03-19T10:25:01.019922Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_filenames = os.listdir(\"../input/dog-vs-cat-classification/test/test\")\ntest_df = pd.DataFrame({\n    'id': test_filenames\n})\n","metadata":{"execution":{"iopub.status.busy":"2022-03-19T10:25:26.015755Z","iopub.execute_input":"2022-03-19T10:25:26.016038Z","iopub.status.idle":"2022-03-19T10:25:26.505135Z","shell.execute_reply.started":"2022-03-19T10:25:26.016006Z","shell.execute_reply":"2022-03-19T10:25:26.504423Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_generator = test_datagen.flow_from_dataframe(\n    test_df,\n    \"../input/dog-vs-cat-classification/test/test\",\n    x_col='id',\n    y_col=None,\n    class_mode=None,\n    target_size=(IMG_SIZE,IMG_SIZE),\n    batch_size=BATCH_SIZE,\n    shuffle=False\n)","metadata":{"execution":{"iopub.status.busy":"2022-03-19T10:25:29.726308Z","iopub.execute_input":"2022-03-19T10:25:29.726785Z","iopub.status.idle":"2022-03-19T10:25:45.739993Z","shell.execute_reply.started":"2022-03-19T10:25:29.726748Z","shell.execute_reply":"2022-03-19T10:25:45.739251Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = model.predict(test_generator)\ntest_df['labels'] = np.argmax(predict, axis=-1)\nprint(test_df)\ntest_df.set_index('id')\ntest_df.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-03-19T10:25:51.887772Z","iopub.execute_input":"2022-03-19T10:25:51.888403Z","iopub.status.idle":"2022-03-19T10:27:23.277850Z","shell.execute_reply.started":"2022-03-19T10:25:51.888357Z","shell.execute_reply":"2022-03-19T10:27:23.277083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('catvsdog.h5')","metadata":{"execution":{"iopub.status.busy":"2022-03-19T10:27:50.844265Z","iopub.execute_input":"2022-03-19T10:27:50.844952Z","iopub.status.idle":"2022-03-19T10:27:51.682516Z","shell.execute_reply.started":"2022-03-19T10:27:50.844918Z","shell.execute_reply":"2022-03-19T10:27:51.681772Z"},"trusted":true},"execution_count":null,"outputs":[]}]}