{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":5048,"databundleVersionId":868335,"sourceType":"competition"}],"dockerImageVersionId":30674,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"pip install keras","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:51:07.405008Z","iopub.execute_input":"2024-04-09T17:51:07.405295Z","iopub.status.idle":"2024-04-09T17:51:22.050955Z","shell.execute_reply.started":"2024-04-09T17:51:07.405269Z","shell.execute_reply":"2024-04-09T17:51:22.049748Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nfrom glob import glob\nimport random\nimport time\nimport tensorflow\nimport datetime\nos.environ['KERAS_BACKEND'] = 'tensorflow'\nos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # 3 = INFO, WARNING, and ERROR\nfrom tqdm import tqdm\nimport numpy as np\nimport pandas as pd\nfrom IPython.display import FileLink\nimport matplotlib.pyplot as plt\nimport warnings\nwarnings.filterwarnings('ignore')\nimport seaborn as sns \n%matplotlib inline\nfrom IPython.display import display, Image\nimport matplotlib.image as mpimg\nimport cv2\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.datasets import load_files\n#from keras.utils import np_utils\nfrom sklearn.utils import shuffle\nfrom sklearn.metrics import log_loss\n\nfrom tensorflow import keras \nfrom keras.models import Sequential, Model\nfrom keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization, GlobalAveragePooling2D\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.preprocessing import image\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping\nfrom keras.applications.vgg16 import VGG16\nfrom keras.models import Model\nfrom tensorflow.keras.applications.resnet50 import preprocess_input as resnet50_preprocess_input\nfrom tensorflow.keras.applications.vgg16 import preprocess_input as vgg16_preprocess_input\nfrom tensorflow.keras.preprocessing import image\nfrom tensorflow.keras.applications import ResNet50\n\n","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:55:08.783691Z","iopub.execute_input":"2024-04-09T17:55:08.784106Z","iopub.status.idle":"2024-04-09T17:55:08.799175Z","shell.execute_reply.started":"2024-04-09T17:55:08.784074Z","shell.execute_reply":"2024-04-09T17:55:08.798322Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"driver_imgs_list=pd.read_csv('/kaggle/input/state-farm-distracted-driver-detection/driver_imgs_list.csv')","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:55:25.960224Z","iopub.execute_input":"2024-04-09T17:55:25.961159Z","iopub.status.idle":"2024-04-09T17:55:25.987164Z","shell.execute_reply.started":"2024-04-09T17:55:25.961122Z","shell.execute_reply":"2024-04-09T17:55:25.986278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"driver_imgs_list.head()","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:55:26.025357Z","iopub.execute_input":"2024-04-09T17:55:26.025654Z","iopub.status.idle":"2024-04-09T17:55:26.035115Z","shell.execute_reply.started":"2024-04-09T17:55:26.025631Z","shell.execute_reply":"2024-04-09T17:55:26.034221Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Groupby subjects\nby_drivers = driver_imgs_list.groupby('subject') \n# Groupby unique drivers\nunique_drivers = by_drivers.groups.keys() # drivers id\nprint('There are : ',len(unique_drivers), ' unique drivers')\nprint('There is a mean of ',round(driver_imgs_list.groupby('subject').count()['classname'].mean()), ' images by driver.')","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:55:26.100147Z","iopub.execute_input":"2024-04-09T17:55:26.100606Z","iopub.status.idle":"2024-04-09T17:55:26.117761Z","shell.execute_reply.started":"2024-04-09T17:55:26.100580Z","shell.execute_reply":"2024-04-09T17:55:26.116819Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"classes=[c for c in os.listdir('/kaggle/input/state-farm-distracted-driver-detection/imgs/train')]\nclasses.sort()\nprint(classes)\nclasses_length=len(classes)\n","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:55:59.355209Z","iopub.execute_input":"2024-04-09T17:55:59.355678Z","iopub.status.idle":"2024-04-09T17:55:59.362883Z","shell.execute_reply.started":"2024-04-09T17:55:59.355649Z","shell.execute_reply":"2024-04-09T17:55:59.362003Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dict={}\nfor c in classes:\n    for img in os.listdir(os.path.join('/kaggle/input/state-farm-distracted-driver-detection/imgs/train',c)):\n        dict.setdefault(\"img\", []).append(img)\n        dict.setdefault(\"class\", []).append(c)\n\ndf = pd.DataFrame(dict)\nax = sns.countplot(data=df,x=\"class\")\nax.set(title=\"Classes distribution\")\nprint(\"Total number of training data :\",len(df))\n       ","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:56:04.590745Z","iopub.execute_input":"2024-04-09T17:56:04.591369Z","iopub.status.idle":"2024-04-09T17:56:04.956337Z","shell.execute_reply.started":"2024-04-09T17:56:04.591338Z","shell.execute_reply":"2024-04-09T17:56:04.955497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_cv2_image(path):\n    img = cv2.imread(path)\n    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n    img = cv2.resize(img, (224, 224))\n    return img","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:56:04.958111Z","iopub.execute_input":"2024-04-09T17:56:04.959106Z","iopub.status.idle":"2024-04-09T17:56:04.963687Z","shell.execute_reply.started":"2024-04-09T17:56:04.959071Z","shell.execute_reply":"2024-04-09T17:56:04.962933Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_train():\n    train_images = [] \n    train_labels = []\n    for classed in tqdm(range(classes_length)):\n        print('Loading directory c{}'.format(classed))\n        files = glob(os.path.join('../input/state-farm-distracted-driver-detection/imgs/train/c' + str(classed), '*.jpg'))\n        for file in files:\n            img = get_cv2_image(file)\n            train_images.append(img)\n            train_labels.append(classed)\n    return train_images, train_labels ","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:56:04.964826Z","iopub.execute_input":"2024-04-09T17:56:04.965108Z","iopub.status.idle":"2024-04-09T17:56:04.977010Z","shell.execute_reply.started":"2024-04-09T17:56:04.965085Z","shell.execute_reply":"2024-04-09T17:56:04.976292Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.utils import to_categorical\ndef read_and_normalize_train_data():\n    \"\"\"\n    Load + categorical + split\n    \"\"\"\n    X, labels = load_train()\n    y = to_categorical(labels, 10) #categorical train label\n    x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # split into train and test\n    x_train = np.array(x_train, dtype=np.uint8).reshape(-1,224,224,1)\n    x_test = np.array(x_test, dtype=np.uint8).reshape(-1,224,224,1)\n    \n    return x_train, x_test, y_train, y_test","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:56:04.978885Z","iopub.execute_input":"2024-04-09T17:56:04.979215Z","iopub.status.idle":"2024-04-09T17:56:04.989611Z","shell.execute_reply.started":"2024-04-09T17:56:04.979186Z","shell.execute_reply":"2024-04-09T17:56:04.988937Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_test(size=200000):\n    \"\"\"\n    Same as above but for validation dataset\n    \"\"\"\n    path = os.path.join('../input/state-farm-distracted-driver-detection/imgs/test', '*.jpg')\n    files = sorted(glob(path))\n    X_test, X_test_id = [], []\n    total = 0\n    files_size = len(files)\n    for file in tqdm(files):\n        if total >= size or total >= files_size:\n            break\n        file_base = os.path.basename(file)\n        img = get_cv2_image(file)\n        X_test.append(img)\n        X_test_id.append(file_base)\n        total += 1\n    return X_test, X_test_id\n\ndef read_and_normalize_sampled_test_data(size):\n    test_data, test_ids = load_test(size)   \n    test_data = np.array(test_data, dtype=np.uint8)\n    test_data = test_data.reshape(-1,224,224,1)\n    return test_data, test_ids","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:56:04.990721Z","iopub.execute_input":"2024-04-09T17:56:04.991267Z","iopub.status.idle":"2024-04-09T17:56:05.003045Z","shell.execute_reply.started":"2024-04-09T17:56:04.991235Z","shell.execute_reply":"2024-04-09T17:56:05.002321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_samples = 200\n\n# loading train images\nx_train, x_test, y_train, y_test = read_and_normalize_train_data()\n\n# loading validation images\ntest_files, test_targets = read_and_normalize_sampled_test_data(test_samples)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T17:56:05.255328Z","iopub.execute_input":"2024-04-09T17:56:05.255973Z","iopub.status.idle":"2024-04-09T18:01:49.953122Z","shell.execute_reply.started":"2024-04-09T17:56:05.255940Z","shell.execute_reply":"2024-04-09T18:01:49.952122Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"activity_map = {'c0': 'Safe driving', \n                'c1': 'Texting - right', \n                'c2': 'Talking on the phone - right', \n                'c3': 'Texting - left', \n                'c4': 'Talking on the phone - left', \n                'c5': 'Operating the radio', \n                'c6': 'Drinking', \n                'c7': 'Reaching behind', \n                'c8': 'Hair and makeup', \n                'c9': 'Talking to passenger'}\n\n\nplt.figure(figsize = (12, 20))\nimage_count = 1\nBASE_URL = '../input/state-farm-distracted-driver-detection/imgs/train/'\nfor directory in os.listdir(BASE_URL):\n    if directory[0] != '.':\n        for i, file in enumerate(os.listdir(BASE_URL + directory)):\n            if i == 1:\n                break\n            else:\n                fig = plt.subplot(5, 2, image_count)\n                image_count += 1\n                image = mpimg.imread(BASE_URL + directory + '/' + file)\n                plt.imshow(image)\n                plt.title(activity_map[directory])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:01:49.954644Z","iopub.execute_input":"2024-04-09T18:01:49.954932Z","iopub.status.idle":"2024-04-09T18:01:52.958766Z","shell.execute_reply.started":"2024-04-09T18:01:49.954907Z","shell.execute_reply":"2024-04-09T18:01:52.957671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **CNN Model**\n","metadata":{}},{"cell_type":"code","source":"# Number of batch size and epochs\nbatch_size = 40 #40\nn_epoch = 6 #10","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:01:52.959978Z","iopub.execute_input":"2024-04-09T18:01:52.960282Z","iopub.status.idle":"2024-04-09T18:01:52.964596Z","shell.execute_reply.started":"2024-04-09T18:01:52.960255Z","shell.execute_reply":"2024-04-09T18:01:52.963742Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models_dir = \"saved_models\"\nif not os.path.exists(models_dir):\n    os.makedirs(models_dir)\n    \ncheckpointer = ModelCheckpoint(filepath='saved_models/weights_best_vanilla.keras', \n                               monitor='val_loss', mode='min',\n                               verbose=1, save_best_only=True)\nes = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=2)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:01:52.966642Z","iopub.execute_input":"2024-04-09T18:01:52.966924Z","iopub.status.idle":"2024-04-09T18:01:52.985164Z","shell.execute_reply.started":"2024-04-09T18:01:52.966900Z","shell.execute_reply":"2024-04-09T18:01:52.984371Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_model():\n    model = Sequential()\n\n    ## CNN 1\n    model.add(Conv2D(32,(3,3),activation='relu',input_shape=(224, 224, 1)))\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,activation='relu'))\n    model.add(BatchNormalization())\n    model.add(Dropout(0.5))\n    model.add(Dense(128,activation='relu'))\n    model.add(Dropout(0.25))\n    model.add(Dense(10,activation='softmax'))\n\n    return model","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:01:52.986302Z","iopub.execute_input":"2024-04-09T18:01:52.986640Z","iopub.status.idle":"2024-04-09T18:01:53.000655Z","shell.execute_reply.started":"2024-04-09T18:01:52.986617Z","shell.execute_reply":"2024-04-09T18:01:52.999750Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = create_model()\n\n# More details about the layers\nmodel.summary()\n\n# Compiling the model\nmodel.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:01:53.001930Z","iopub.execute_input":"2024-04-09T18:01:53.002192Z","iopub.status.idle":"2024-04-09T18:01:53.374841Z","shell.execute_reply.started":"2024-04-09T18:01:53.002170Z","shell.execute_reply":"2024-04-09T18:01:53.374006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(x_train, y_train, \n          validation_data=(x_test, y_test),\n          epochs=n_epoch, batch_size=batch_size, verbose=1,callbacks=[es])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:01:53.376078Z","iopub.execute_input":"2024-04-09T18:01:53.376366Z","iopub.status.idle":"2024-04-09T18:10:50.265771Z","shell.execute_reply.started":"2024-04-09T18:01:53.376341Z","shell.execute_reply":"2024-04-09T18:10:50.264947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('History of the training',history.history)\n","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:10:50.267161Z","iopub.execute_input":"2024-04-09T18:10:50.267462Z","iopub.status.idle":"2024-04-09T18:10:50.272329Z","shell.execute_reply.started":"2024-04-09T18:10:50.267426Z","shell.execute_reply":"2024-04-09T18:10:50.271418Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plot_train_history(history):\n    \"\"\"\n    Plot the validation accuracy and validation loss over epochs\n    \"\"\"\n    # Summarize history for accuracy\n    plt.plot(history.history['accuracy'])\n    plt.plot(history.history['val_accuracy'])\n    plt.title('Model accuracy')\n    plt.ylabel('accuracy')\n    plt.xlabel('epoch')\n    plt.legend(['train', 'test'], loc='upper left')\n    plt.show()\n\n    # Summarize history for loss\n    plt.plot(history.history['loss'])\n    plt.plot(history.history['val_loss'])\n    plt.title('Model loss')\n    plt.ylabel('loss')\n    plt.xlabel('epoch')\n    plt.legend(['train', 'test'], loc='upper left')\n    plt.show()\n    \nplot_train_history(history)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:10:50.273574Z","iopub.execute_input":"2024-04-09T18:10:50.273844Z","iopub.status.idle":"2024-04-09T18:10:50.848608Z","shell.execute_reply.started":"2024-04-09T18:10:50.273821Z","shell.execute_reply":"2024-04-09T18:10:50.847734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score1 = model.evaluate(x_test, y_test, verbose=1)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:10:50.852408Z","iopub.execute_input":"2024-04-09T18:10:50.852734Z","iopub.status.idle":"2024-04-09T18:11:11.835615Z","shell.execute_reply.started":"2024-04-09T18:10:50.852708Z","shell.execute_reply":"2024-04-09T18:11:11.834708Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Loss: ', score1[0])\nprint('Accuracy: ', score1[1]*100, ' %')","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:11:11.836809Z","iopub.execute_input":"2024-04-09T18:11:11.837088Z","iopub.status.idle":"2024-04-09T18:11:11.842725Z","shell.execute_reply.started":"2024-04-09T18:11:11.837064Z","shell.execute_reply":"2024-04-09T18:11:11.841731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Data Augmentation**","metadata":{}},{"cell_type":"code","source":"# Using ImageDataGenerator from keras\ntrain_datagen = ImageDataGenerator(rescale = 1.0/255, \n                                   shear_range = 0.2, \n                                   zoom_range = 0.2, \n                                   horizontal_flip = True, \n                                   validation_split = 0.2)\n\ntest_datagen = ImageDataGenerator(rescale=1.0/ 255, validation_split = 0.2)\n","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:11:11.843934Z","iopub.execute_input":"2024-04-09T18:11:11.844278Z","iopub.status.idle":"2024-04-09T18:11:11.857714Z","shell.execute_reply.started":"2024-04-09T18:11:11.844246Z","shell.execute_reply":"2024-04-09T18:11:11.856828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nb_train_samples = x_train.shape[0]\nnb_validation_samples = x_test.shape[0]\ntraining_generator = train_datagen.flow(x_train, y_train, batch_size=batch_size)\nvalidation_generator = test_datagen.flow(x_test, y_test, batch_size=batch_size)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:11:11.858882Z","iopub.execute_input":"2024-04-09T18:11:11.860542Z","iopub.status.idle":"2024-04-09T18:11:12.931415Z","shell.execute_reply.started":"2024-04-09T18:11:11.860511Z","shell.execute_reply":"2024-04-09T18:11:12.930399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_v2 = model.fit(training_generator,\n                         steps_per_epoch = nb_train_samples // batch_size,\n                         epochs = n_epoch, \n                         verbose = 1,\n                         validation_data = validation_generator,\n                         validation_steps = nb_validation_samples // batch_size)\nplot_train_history(history_v2)\n","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:11:12.932808Z","iopub.execute_input":"2024-04-09T18:11:12.933644Z","iopub.status.idle":"2024-04-09T18:15:39.625862Z","shell.execute_reply.started":"2024-04-09T18:11:12.933607Z","shell.execute_reply":"2024-04-09T18:15:39.624865Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Evaluate and compare the performance of the new model\nscore2 = model.evaluate(validation_generator)\nprint(\"Loss for model 1\",score1[0])\nprint(\"Loss for model 2 (data augmentation):\", score2[0])\n\nprint(\"Test accuracy for model 1\",score1[1])\nprint(\"Test accuracy for model 2 (data augmentation):\", score2[1])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:15:39.626993Z","iopub.execute_input":"2024-04-09T18:15:39.627285Z","iopub.status.idle":"2024-04-09T18:15:44.416424Z","shell.execute_reply.started":"2024-04-09T18:15:39.627259Z","shell.execute_reply":"2024-04-09T18:15:44.415513Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Transfer Learning**","metadata":{}},{"cell_type":"code","source":"def resnet_std50_model(img_rows, img_cols, color_type=3):\n    \"\"\"\n    Architecture and adaptation of the VGG16 for our project\n    \"\"\"\n    nb_classes = 10\n    # Remove fully connected layer and replace\n    resnet_model = ResNet50(weights=\"imagenet\", include_top=False)\n    for layer in resnet_model.layers:\n        layer.trainable = False\n    \n    x = resnet_model.output\n    x = GlobalAveragePooling2D()(x)\n    x = Dense(1024, activation='relu')(x)\n    predictions = Dense(nb_classes, activation = 'softmax')(x) # add dense layer with 10 neurons and activation softmax\n    model = Model(resnet_model.input,predictions)\n    return model","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:15:44.417811Z","iopub.execute_input":"2024-04-09T18:15:44.418542Z","iopub.status.idle":"2024-04-09T18:15:44.424819Z","shell.execute_reply.started":"2024-04-09T18:15:44.418492Z","shell.execute_reply":"2024-04-09T18:15:44.423912Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load the VGG16 network\nprint(\"Loading network...\")\nmodel_resnet50 = resnet_std50_model(224, 224)\nmodel_resnet50.summary()\nmodel_resnet50.compile(loss='categorical_crossentropy',\n                         optimizer='Adam',\n                         metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:15:44.425905Z","iopub.execute_input":"2024-04-09T18:15:44.426223Z","iopub.status.idle":"2024-04-09T18:15:47.106436Z","shell.execute_reply.started":"2024-04-09T18:15:44.426195Z","shell.execute_reply":"2024-04-09T18:15:47.105607Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"training_generator = train_datagen.flow_from_directory('../input/state-farm-distracted-driver-detection/imgs/train', \n                                                 target_size = (224, 224), \n                                                 batch_size = batch_size,\n                                                 shuffle=True,\n                                                 class_mode='categorical', subset=\"training\")\n\nvalidation_generator = test_datagen.flow_from_directory('/kaggle/input/state-farm-distracted-driver-detection/imgs/test', \n                                                   target_size = (224, 224), \n                                                   batch_size = batch_size,\n                                                   shuffle=False,\n                                                   class_mode='categorical', subset=\"validation\")\nnb_train_samples = 17943\nnb_validation_samples = 4481","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:15:47.107957Z","iopub.execute_input":"2024-04-09T18:15:47.108582Z","iopub.status.idle":"2024-04-09T18:21:36.145727Z","shell.execute_reply.started":"2024-04-09T18:15:47.108545Z","shell.execute_reply":"2024-04-09T18:21:36.144862Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_v3 = model_resnet50.fit(training_generator,\n                         steps_per_epoch = nb_train_samples // batch_size,\n                         epochs = 70, \n                         verbose = 1)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T18:21:36.146823Z","iopub.execute_input":"2024-04-09T18:21:36.147119Z","iopub.status.idle":"2024-04-09T20:28:12.984416Z","shell.execute_reply.started":"2024-04-09T18:21:36.147094Z","shell.execute_reply":"2024-04-09T20:28:12.983680Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_train_history(history_v3)\n","metadata":{"execution":{"iopub.status.busy":"2024-04-09T20:28:12.985767Z","iopub.execute_input":"2024-04-09T20:28:12.986470Z","iopub.status.idle":"2024-04-09T20:28:13.328053Z","shell.execute_reply.started":"2024-04-09T20:28:12.986410Z","shell.execute_reply":"2024-04-09T20:28:13.326795Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **VGG16**","metadata":{}},{"cell_type":"code","source":"def vgg_std16_model(img_rows, img_cols, color_type=3):\n    \"\"\"\n    Architecture and adaptation of the VGG16 for our project\n    \"\"\"\n    nb_classes = 10\n    # Remove fully connected layer and replace\n    vgg16_model = VGG16(weights=\"imagenet\", include_top=False)\n    for layer in vgg16_model.layers:\n        layer.trainable = False\n    \n    x = vgg16_model.output\n    x = GlobalAveragePooling2D()(x)\n    x = Dense(1024, activation='relu')(x)\n    predictions = Dense(nb_classes, activation = 'softmax')(x) # add dense layer with 10 neurons and activation softmax\n    model = Model(vgg16_model.input,predictions)\n    return model","metadata":{"execution":{"iopub.status.busy":"2024-04-09T20:28:28.570623Z","iopub.execute_input":"2024-04-09T20:28:28.571009Z","iopub.status.idle":"2024-04-09T20:28:28.577669Z","shell.execute_reply.started":"2024-04-09T20:28:28.570979Z","shell.execute_reply":"2024-04-09T20:28:28.576815Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Loading network...\")\nmodel_vgg16 = vgg_std16_model(224, 224)\nmodel_vgg16.summary()\nmodel_vgg16.compile(loss='categorical_crossentropy',\n                         optimizer='Adam',\n                         metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-04-09T20:28:36.674859Z","iopub.execute_input":"2024-04-09T20:28:36.675285Z","iopub.status.idle":"2024-04-09T20:28:37.344575Z","shell.execute_reply.started":"2024-04-09T20:28:36.675243Z","shell.execute_reply":"2024-04-09T20:28:37.343824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"training_generator = train_datagen.flow_from_directory('../input/state-farm-distracted-driver-detection/imgs/train', \n                                                 target_size = (224, 224), \n                                                 batch_size = batch_size,\n                                                 shuffle=True,\n                                                 class_mode='categorical', subset=\"training\")\n\nvalidation_generator = test_datagen.flow_from_directory('../input/state-farm-distracted-driver-detection/imgs/test', \n                                                   target_size = (224, 224), \n                                                   batch_size = batch_size,\n                                                   shuffle=False,\n                                                   class_mode='categorical', subset=\"validation\")\nnb_train_samples = 17943\nnb_validation_samples = 4481","metadata":{"execution":{"iopub.status.busy":"2024-04-09T20:28:37.345945Z","iopub.execute_input":"2024-04-09T20:28:37.346242Z","iopub.status.idle":"2024-04-09T20:32:24.895566Z","shell.execute_reply.started":"2024-04-09T20:28:37.346217Z","shell.execute_reply":"2024-04-09T20:32:24.894734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_v3 = model_vgg16.fit(training_generator,\n                         steps_per_epoch = nb_train_samples // batch_size,\n                         epochs = 10, \n                         verbose = 1\n                         )","metadata":{"execution":{"iopub.status.busy":"2024-04-09T20:32:24.896661Z","iopub.execute_input":"2024-04-09T20:32:24.896962Z","iopub.status.idle":"2024-04-09T20:50:51.177206Z","shell.execute_reply.started":"2024-04-09T20:32:24.896935Z","shell.execute_reply":"2024-04-09T20:50:51.176423Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_train_history(history_v3)","metadata":{"execution":{"iopub.status.busy":"2024-04-09T20:50:51.178965Z","iopub.execute_input":"2024-04-09T20:50:51.179269Z","iopub.status.idle":"2024-04-09T20:50:51.693139Z","shell.execute_reply.started":"2024-04-09T20:50:51.179243Z","shell.execute_reply":"2024-04-09T20:50:51.691721Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}