{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\n%pip install keras\n%pip install tensorflow\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-01-15T16:23:40.500150Z","iopub.execute_input":"2023-01-15T16:23:40.500591Z","iopub.status.idle":"2023-01-15T16:24:17.276870Z","shell.execute_reply.started":"2023-01-15T16:23:40.500498Z","shell.execute_reply":"2023-01-15T16:24:17.275566Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt","metadata":{"execution":{"iopub.status.busy":"2023-01-15T16:24:34.878435Z","iopub.execute_input":"2023-01-15T16:24:34.878810Z","iopub.status.idle":"2023-01-15T16:24:34.885585Z","shell.execute_reply.started":"2023-01-15T16:24:34.878776Z","shell.execute_reply":"2023-01-15T16:24:34.884474Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.models import Sequential, Model\nfrom keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization, GlobalAveragePooling2D\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping","metadata":{"execution":{"iopub.status.busy":"2023-01-15T16:24:39.127266Z","iopub.execute_input":"2023-01-15T16:24:39.127631Z","iopub.status.idle":"2023-01-15T16:24:43.923320Z","shell.execute_reply.started":"2023-01-15T16:24:39.127599Z","shell.execute_reply":"2023-01-15T16:24:43.922264Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nfrom glob import glob\nimport tensorflow as tf\ndataset = pd.read_csv(\"/kaggle/input/trial-dataset/state-farm-distracted-driver-detection/driver_imgs_list.csv\" )\ndataset.head(10)\ntf.keras.utils.image_dataset_from_directory(\n    \"/kaggle/input/trial-dataset/state-farm-distracted-driver-detection/imgs/train\",\n    labels='inferred',\n    label_mode='int',\n    class_names=None,\n    color_mode='rgb',\n    batch_size=32,\n    image_size=(256, 256),\n    shuffle=True,\n    seed=None,\n    validation_split=None,\n    subset=None,\n    interpolation='bilinear',\n    follow_links=False,\n    crop_to_aspect_ratio=False,\n)","metadata":{"execution":{"iopub.status.busy":"2023-01-15T16:25:43.605221Z","iopub.execute_input":"2023-01-15T16:25:43.605855Z","iopub.status.idle":"2023-01-15T16:26:07.530856Z","shell.execute_reply.started":"2023-01-15T16:25:43.605822Z","shell.execute_reply":"2023-01-15T16:26:07.529878Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_size = 64\nimg_height = 224\nimg_width = 224","metadata":{"execution":{"iopub.status.busy":"2023-01-15T16:26:07.532641Z","iopub.execute_input":"2023-01-15T16:26:07.533260Z","iopub.status.idle":"2023-01-15T16:26:07.538499Z","shell.execute_reply.started":"2023-01-15T16:26:07.533224Z","shell.execute_reply":"2023-01-15T16:26:07.537254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_ds = tf.keras.utils.image_dataset_from_directory(\n  \"/kaggle/input/trial-dataset/state-farm-distracted-driver-detection/imgs/train\",\n  validation_split=0.2,\n  subset=\"training\",\n  seed=123,\n  image_size=(img_height, img_width),\n  batch_size=batch_size)\nval_ds = tf.keras.utils.image_dataset_from_directory(\n  \"/kaggle/input/trial-dataset/state-farm-distracted-driver-detection/imgs/train\",\n  validation_split=0.2,\n  subset=\"validation\",\n  seed=123,\n  image_size=(img_height, img_width),\n  batch_size=batch_size)","metadata":{"execution":{"iopub.status.busy":"2023-01-15T16:28:06.732251Z","iopub.execute_input":"2023-01-15T16:28:06.732645Z","iopub.status.idle":"2023-01-15T16:28:12.731660Z","shell.execute_reply.started":"2023-01-15T16:28:06.732612Z","shell.execute_reply":"2023-01-15T16:28:12.730631Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_ds = tf.keras.utils.image_dataset_from_directory(\n    \"/kaggle/input/trial-dataset/state-farm-distracted-driver-detection/imgs/test_data\",\n    labels='inferred',\n    label_mode='int',\n    class_names=None,\n    color_mode='rgb',\n    batch_size=32,\n    image_size=(img_height, img_width),\n    shuffle=True,\n    seed=123,\n    validation_split=None,\n    subset=None,\n    interpolation='bilinear',\n    follow_links=False,\n    crop_to_aspect_ratio=False,\n)\n","metadata":{"execution":{"iopub.status.busy":"2023-01-15T16:29:26.646164Z","iopub.execute_input":"2023-01-15T16:29:26.646900Z","iopub.status.idle":"2023-01-15T16:30:48.229189Z","shell.execute_reply.started":"2023-01-15T16:29:26.646865Z","shell.execute_reply":"2023-01-15T16:30:48.228151Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.python.keras import regularizers\ndef create_model():\n    model = Sequential()\n\n    ## CNN 1\n    model.add(Conv2D(32,(3,3),activation='relu',input_shape=(224, 224, 3)))\n    model.add(BatchNormalization())\n    model.add(Conv2D(32,(3,3),activation='relu',padding='same'))\n    model.add(BatchNormalization(axis = 3))\n    model.add(MaxPooling2D(pool_size=(2,2),padding='same'))\n    model.add(Dropout(0.3))\n\n    ## CNN 2\n    model.add(Conv2D(64,(3,3),activation='relu',padding='same'))\n    model.add(BatchNormalization())\n    model.add(Conv2D(64,(3,3),activation='relu',padding='same'))\n    model.add(BatchNormalization(axis = 3))\n    model.add(MaxPooling2D(pool_size=(2,2),padding='same'))\n    model.add(Dropout(0.3))\n\n    ## CNN 3\n    model.add(Conv2D(128,(3,3),activation='relu',padding='same'))\n    model.add(BatchNormalization())\n    model.add(Conv2D(128,(3,3),activation='relu',padding='same'))\n    model.add(BatchNormalization(axis = 3))\n    model.add(MaxPooling2D(pool_size=(2,2),padding='same'))\n    model.add(Dropout(0.5))\n\n    ## Output\n    model.add(Flatten())\n    model.add(Dense(512,kernel_regularizer=regularizers.l2(0.0001),activation='relu'))\n    model.add(BatchNormalization())\n    model.add(Dropout(0.5))\n    model.add(Dense(128,kernel_regularizer=regularizers.l2(0.0001),activation='relu'))\n    model.add(Dropout(0.25))\n    model.add(Dense(10,kernel_regularizer=regularizers.l2(0.0001),activation='softmax'))\n\n    return model\nmodel = create_model()\nmodel.compile(\n    optimizer='adam',\n    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n    metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2023-01-15T17:43:13.823704Z","iopub.execute_input":"2023-01-15T17:43:13.824115Z","iopub.status.idle":"2023-01-15T17:43:14.022024Z","shell.execute_reply.started":"2023-01-15T17:43:13.824080Z","shell.execute_reply":"2023-01-15T17:43:14.020950Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(\n  train_ds,\n  validation_data=val_ds,\n  epochs=6,\n)","metadata":{"execution":{"iopub.status.busy":"2023-01-15T17:43:21.110702Z","iopub.execute_input":"2023-01-15T17:43:21.111096Z","iopub.status.idle":"2023-01-15T17:57:06.966824Z","shell.execute_reply.started":"2023-01-15T17:43:21.111061Z","shell.execute_reply":"2023-01-15T17:57:06.962309Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(test_ds,verbose=1)\n","metadata":{"execution":{"iopub.status.busy":"2023-01-15T17:57:06.969184Z","iopub.execute_input":"2023-01-15T17:57:06.969912Z","iopub.status.idle":"2023-01-15T18:01:28.913326Z","shell.execute_reply.started":"2023-01-15T17:57:06.969874Z","shell.execute_reply":"2023-01-15T18:01:28.912269Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}