{"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 numpy as np\nimport pandas as pd\nimport os\nimport cv2\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom tensorflow.keras import regularizers\nfrom tensorflow.keras.preprocessing import image_dataset_from_directory\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport matplotlib.pyplot as plt\nfrom keras import optimizers\nfrom keras.models import Sequential\nfrom keras_preprocessing.image import ImageDataGenerator\nfrom keras.layers import Dense, Activation, Flatten, Dropout, BatchNormalization\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom keras import regularizers, optimizers","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-03-20T04:45:30.440282Z","iopub.execute_input":"2022-03-20T04:45:30.44067Z","iopub.status.idle":"2022-03-20T04:45:37.140428Z","shell.execute_reply.started":"2022-03-20T04:45:30.440556Z","shell.execute_reply":"2022-03-20T04:45:37.139585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/happy-whale-and-dolphin/train.csv')\ntrain_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-03-20T04:45:37.142465Z","iopub.execute_input":"2022-03-20T04:45:37.14296Z","iopub.status.idle":"2022-03-20T04:45:37.240949Z","shell.execute_reply.started":"2022-03-20T04:45:37.142912Z","shell.execute_reply":"2022-03-20T04:45:37.240244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_ids = os.listdir('../input/happy-whale-and-dolphin/test_images')\ntest_df = pd.DataFrame({'image_ids':test_ids})\ntest_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-03-20T04:45:37.245567Z","iopub.execute_input":"2022-03-20T04:45:37.246063Z","iopub.status.idle":"2022-03-20T04:45:37.696936Z","shell.execute_reply.started":"2022-03-20T04:45:37.246027Z","shell.execute_reply":"2022-03-20T04:45:37.696225Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['individual_id'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-03-20T04:45:37.698256Z","iopub.execute_input":"2022-03-20T04:45:37.69868Z","iopub.status.idle":"2022-03-20T04:45:37.724678Z","shell.execute_reply.started":"2022-03-20T04:45:37.69864Z","shell.execute_reply":"2022-03-20T04:45:37.723936Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(pd.unique(train_df['individual_id']))","metadata":{"execution":{"iopub.status.busy":"2022-03-20T04:45:37.725973Z","iopub.execute_input":"2022-03-20T04:45:37.726234Z","iopub.status.idle":"2022-03-20T04:45:37.7395Z","shell.execute_reply.started":"2022-03-20T04:45:37.7262Z","shell.execute_reply":"2022-03-20T04:45:37.738753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dir = \"../input/happy-whale-and-dolphin/train_images\"\n\ntrain_datagen = ImageDataGenerator(rescale = 1./255,\n                                   shear_range = 0.2,\n                                   zoom_range = 0.2,\n                                   height_shift_range = 0.1,\n                                   width_shift_range = 0.1,\n                                validation_split = 0.2,\n                                horizontal_flip = True)\n\nvalid_datagen = ImageDataGenerator(rescale = 1./255,\n                                  validation_split = 0.2)\n\ntrain_set = train_datagen.flow_from_dataframe(train_df, train_dir,\n                                              seed = 101,\n                                            target_size = (64,64),\n                                            batch_size = 32,\n                                            x_col='image',\n                                            y_col='individual_id',\n                                            class_mode = 'categorical',\n                                            subset = 'training')\n\nvalid_set = valid_datagen.flow_from_dataframe(train_df, \n                                              train_dir,\n                                                seed = 101,\n                                                target_size = (64,64),\n                                              x_col='image',\n                                                y_col='individual_id',\n                                                batch_size = 32,\n                                                class_mode = 'categorical',\n                                                subset = 'validation')\n\n  \n","metadata":{"execution":{"iopub.status.busy":"2022-03-20T04:45:37.741197Z","iopub.execute_input":"2022-03-20T04:45:37.741784Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_datagen = ImageDataGenerator(rescale = 1./255)\ntest_dir = '../input/happy-whale-and-dolphin/test_images'\n\ntest_set = test_datagen.flow_from_dataframe(test_df,\n                                            test_dir,\n                                            x_col='image_ids',\n                                            y_col=None,\n                                            seed = 101,\n                                            batch_size = 32,\n                                            class_mode=None,\n                                            target_size = (64,64)                           \n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# CNN Model","metadata":{}},{"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(64, (3, 3), padding='same',\n                 input_shape=(64,64,3)))\nmodel.add(Activation('relu'))\nmodel.add(Conv2D(64, (3, 3)))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\nmodel.add(Conv2D(64, (3, 3), padding='same'))\nmodel.add(Activation('relu'))\nmodel.add(Conv2D(64, (3, 3)))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\nmodel.add(Flatten())\nmodel.add(Dense(512))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(15587, activation='softmax'))\nmodel.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=\"adamax\",loss=\"categorical_crossentropy\",metrics=[tf.keras.metrics.Precision(top_k=5)])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"STEP_SIZE_TRAIN=train_set.n//train_set.batch_size\nSTEP_SIZE_VALID=valid_set.n//valid_set.batch_size\nSTEP_SIZE_TEST=test_set.n//test_set.batch_size\nmodel.fit_generator(generator=train_set,\n                    steps_per_epoch=STEP_SIZE_TRAIN,\n                    validation_data=valid_set,\n                    validation_steps=STEP_SIZE_VALID,\n                    epochs=5\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}