{"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 # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport os\nfrom PIL import Image\nfrom IPython.display import display \nimport random\nimport tensorflow as tf","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-02-20T04:41:51.845189Z","iopub.execute_input":"2023-02-20T04:41:51.845864Z","iopub.status.idle":"2023-02-20T04:41:57.548599Z","shell.execute_reply.started":"2023-02-20T04:41:51.845775Z","shell.execute_reply":"2023-02-20T04:41:57.547666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_list = pd.read_csv('../input/state-farm-distracted-driver-detection/driver_imgs_list.csv')\nimg_list","metadata":{"execution":{"iopub.status.busy":"2023-02-20T04:41:57.550601Z","iopub.execute_input":"2023-02-20T04:41:57.551421Z","iopub.status.idle":"2023-02-20T04:41:57.597745Z","shell.execute_reply.started":"2023-02-20T04:41:57.551383Z","shell.execute_reply":"2023-02-20T04:41:57.596766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_directory = '../input/state-farm-distracted-driver-detection/imgs/train'\nimg_directory_test = '../input/state-farm-distracted-driver-detection/imgs/test'","metadata":{"execution":{"iopub.status.busy":"2023-02-20T04:41:57.599038Z","iopub.execute_input":"2023-02-20T04:41:57.599455Z","iopub.status.idle":"2023-02-20T04:41:57.604452Z","shell.execute_reply.started":"2023-02-20T04:41:57.599421Z","shell.execute_reply":"2023-02-20T04:41:57.603456Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 4:3 ratio images at 640x480, we'll scale it down to make it easier for the network\ntrain_ds = tf.keras.utils.image_dataset_from_directory(img_directory,validation_split=0.2 ,subset=\"training\",seed=123, image_size =(256,192), batch_size=128)\nval_ds = tf.keras.utils.image_dataset_from_directory(img_directory,validation_split=0.2 ,subset=\"validation\",seed=123, image_size =(256,192), batch_size=128)\ntest_ds = tf.keras.utils.image_dataset_from_directory(img_directory_test,labels=None, label_mode=None, image_size=(256,192))","metadata":{"execution":{"iopub.status.busy":"2023-02-20T04:52:44.221077Z","iopub.execute_input":"2023-02-20T04:52:44.221789Z","iopub.status.idle":"2023-02-20T04:53:14.150243Z","shell.execute_reply.started":"2023-02-20T04:52:44.221744Z","shell.execute_reply":"2023-02-20T04:53:14.149223Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_model(input_dims, output_dims):\n    with tf.name_scope(\"cnn\"):\n        model = tf.keras.Sequential()\n        model.add(tf.keras.layers.InputLayer(input_shape=input_dims))\n        model.add(tf.keras.layers.Rescaling(1./255))\n        model.add(tf.keras.layers.Conv2D(16,3, activation=\"relu\"))\n        model.add(tf.keras.layers.Conv2D(32,3,activation=\"relu\"))\n        model.add(tf.keras.layers.MaxPool2D((3,3)))\n        model.add(tf.keras.layers.Conv2D(64, 3,activation=\"relu\"))\n        model.add(tf.keras.layers.Conv2D(128,3,activation=\"relu\"))\n        model.add(tf.keras.layers.MaxPool2D((3,3)))\n        model.add(tf.keras.layers.Conv2D(256,3,activation=\"relu\"))\n        model.add(tf.keras.layers.Conv2D(512,3,activation=\"relu\"))\n        model.add(tf.keras.layers.MaxPool2D((3,3)))\n        model.add(tf.keras.layers.BatchNormalization())\n        model.add(tf.keras.layers.Conv2D(1024,3,activation=\"relu\"))\n        model.add(tf.keras.layers.Flatten())\n        #fully connected layer\n        model.add(tf.keras.layers.Dropout(0.5))\n        model.add(tf.keras.layers.Dense(2048,activation=\"relu\"))\n        model.add(tf.keras.layers.Dense(1024,activation=\"relu\"))\n        model.add(tf.keras.layers.Dense(512, activation=\"relu\"))\n        model.add(tf.keras.layers.Dense(256,activation=\"relu\"))\n        model.add(tf.keras.layers.Dense(128, activation=\"relu\"))\n        model.add(tf.keras.layers.Dense(64, activation=\"relu\"))\n        model.add(tf.keras.layers.Dense(output_dims, activation=\"softmax\"))\n        \n        model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])\n        \n    return model","metadata":{"execution":{"iopub.status.busy":"2023-02-20T04:55:14.377382Z","iopub.execute_input":"2023-02-20T04:55:14.377798Z","iopub.status.idle":"2023-02-20T04:55:14.393261Z","shell.execute_reply.started":"2023-02-20T04:55:14.377759Z","shell.execute_reply":"2023-02-20T04:55:14.392253Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = create_model([256,192,3], 10)","metadata":{"execution":{"iopub.status.busy":"2023-02-20T04:55:16.792494Z","iopub.execute_input":"2023-02-20T04:55:16.792894Z","iopub.status.idle":"2023-02-20T04:55:16.924241Z","shell.execute_reply.started":"2023-02-20T04:55:16.792861Z","shell.execute_reply":"2023-02-20T04:55:16.923282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2023-02-20T04:55:19.149527Z","iopub.execute_input":"2023-02-20T04:55:19.152231Z","iopub.status.idle":"2023-02-20T04:55:19.159483Z","shell.execute_reply.started":"2023-02-20T04:55:19.152196Z","shell.execute_reply":"2023-02-20T04:55:19.158510Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"EPOCHS = 25\n\nhistory = model.fit(train_ds, epochs=EPOCHS, validation_data=val_ds)","metadata":{"execution":{"iopub.status.busy":"2023-02-20T04:55:23.737404Z","iopub.execute_input":"2023-02-20T04:55:23.737801Z","iopub.status.idle":"2023-02-20T05:25:58.800669Z","shell.execute_reply.started":"2023-02-20T04:55:23.737763Z","shell.execute_reply":"2023-02-20T05:25:58.799775Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(sum(history.history['accuracy']) / EPOCHS)","metadata":{"execution":{"iopub.status.busy":"2023-02-20T05:26:09.073157Z","iopub.execute_input":"2023-02-20T05:26:09.073516Z","iopub.status.idle":"2023-02-20T05:26:09.080214Z","shell.execute_reply.started":"2023-02-20T05:26:09.073486Z","shell.execute_reply":"2023-02-20T05:26:09.079063Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nplt.plot(history.history['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2023-02-20T05:26:11.325845Z","iopub.execute_input":"2023-02-20T05:26:11.326494Z","iopub.status.idle":"2023-02-20T05:26:11.592692Z","shell.execute_reply.started":"2023-02-20T05:26:11.326458Z","shell.execute_reply":"2023-02-20T05:26:11.591696Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history['loss'])","metadata":{"execution":{"iopub.status.busy":"2023-02-20T05:26:13.772278Z","iopub.execute_input":"2023-02-20T05:26:13.772630Z","iopub.status.idle":"2023-02-20T05:26:13.972414Z","shell.execute_reply.started":"2023-02-20T05:26:13.772601Z","shell.execute_reply":"2023-02-20T05:26:13.971542Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = model.predict(test_ds)","metadata":{"execution":{"iopub.status.busy":"2023-02-20T05:47:57.910617Z","iopub.execute_input":"2023-02-20T05:47:57.911333Z","iopub.status.idle":"2023-02-20T05:52:21.331915Z","shell.execute_reply.started":"2023-02-20T05:47:57.911294Z","shell.execute_reply":"2023-02-20T05:52:21.330864Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_ids = sorted(os.listdir(img_directory_test))\npred_df = pd.DataFrame(columns=['img','c0','c1','c2','c3','c4','c5','c6','c7','c8','c9'])\nfor i in range(len(predictions)):\n    pred_df.loc[i,'img'] = test_ids[i]\n    pred_df.loc[i , 'c0':'c9'] = predictions[i]","metadata":{"execution":{"iopub.status.busy":"2023-02-20T05:52:21.333718Z","iopub.execute_input":"2023-02-20T05:52:21.334124Z","iopub.status.idle":"2023-02-20T06:01:47.787673Z","shell.execute_reply.started":"2023-02-20T05:52:21.334088Z","shell.execute_reply":"2023-02-20T06:01:47.786665Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred_df.to_csv(\"submission.csv\", index=False)\npred_df","metadata":{"execution":{"iopub.status.busy":"2023-02-20T06:01:47.789316Z","iopub.execute_input":"2023-02-20T06:01:47.789674Z","iopub.status.idle":"2023-02-20T06:01:48.876512Z","shell.execute_reply.started":"2023-02-20T06:01:47.789639Z","shell.execute_reply":"2023-02-20T06:01:48.875612Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}