{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras import Sequential,Model\nfrom tensorflow.keras.layers import Dense,Dropout,Flatten,BatchNormalization\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom keras.applications.vgg16 import VGG16\nfrom keras.applications.mobilenet import preprocess_input\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_width=224\nimg_height=224\nbatch_size=10","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\ndf=pd.read_csv('../input/state-farm-distracted-driver-detection/driver_imgs_list.csv')\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Initializing training dataset\ndatagen = ImageDataGenerator(rescale=1.0/255,\n                             zoom_range=0.2,\n                             horizontal_flip=True,\n                             validation_split=0.3)\ntrain = datagen.flow_from_directory(directory=\"../input/state-farm-distracted-driver-detection/imgs/train\",\n                                              target_size = (img_width, img_height),\n                                              batch_size=batch_size,subset='training')\nvalidation=datagen.flow_from_directory(directory=\"../input/state-farm-distracted-driver-detection/imgs/train\",\n                                           target_size=(img_width,img_height),\n                                           batch_size=batch_size,subset='validation')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# importing VGG16 model\nvgg_arch=VGG16(input_shape=(img_width,img_height,3),weights=\"imagenet\",include_top=False) #include_top= False represents that output layer to be edited\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"vgg_arch.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Freezing the layer so that not to update the weights\nfor layers in vgg_arch.layers:\n  layers.trainable=False","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Training the model\nmodel=Sequential()\nmodel.add(vgg_arch)\nmodel.add(Flatten())\nmodel.add(Dense(128,activation='relu',))\nmodel.add(Dense(256,activation='relu',))\n#model.add(Dropout(0.5))\n#model.add(BatchNormalization())\nmodel.add(Dense(10,activation=\"softmax\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer=\"adam\",loss=\"categorical_crossentropy\",metrics=['accuracy'])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history=model.fit_generator(generator=train, steps_per_epoch=len(train), epochs = 3, \n                              validation_data=validation, validation_steps=len(validation)\n                              , verbose = 1)\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"classes=['Safe driving','Texting-right','Talking on phone-right','Texting-left','Talking on phone-left','Operating the radio',\n        'Drinking','Reaching behind','Hair and makeup','Talking to passenger']\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.preprocessing import image\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img=image.load_img('../input/state-farm-distracted-driver-detection/imgs/test/img_10001.jpg',target_size=(img_width,img_height))\nprint(img.size)\nplt.imshow(img)\nimg=image.img_to_array(img)\nimg=img/255.0\nimg = np.expand_dims(img, axis=0)\nimg_class = np.argmax(model.predict(img),axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(np.argmax(model.predict(img)))\nprint(classes[np.argmax(model.predict(img))])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.save('driverstate_detection_vgg16.h5')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}