{"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 os\n\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras import optimizers\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.preprocessing import image\nfrom tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping\nfrom tensorflow.keras.applications.vgg16 import VGG16\n\nimport tensorflow as tf\nprint(\"Tensorflow version:\", tf.__version__)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:00.348598Z","iopub.execute_input":"2022-10-20T16:34:00.349074Z","iopub.status.idle":"2022-10-20T16:34:00.362849Z","shell.execute_reply.started":"2022-10-20T16:34:00.349035Z","shell.execute_reply":"2022-10-20T16:34:00.361684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for expression in os.listdir(\"../input/deep-learning-sszg529-bits-pilani/train_data/train_data/\"):\n    print(str(len(os.listdir(\"../input/deep-learning-sszg529-bits-pilani/train_data/train_data/\" + expression))) + \" \" + expression + \" images\")","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:00.369941Z","iopub.execute_input":"2022-10-20T16:34:00.370701Z","iopub.status.idle":"2022-10-20T16:34:00.392556Z","shell.execute_reply.started":"2022-10-20T16:34:00.370660Z","shell.execute_reply":"2022-10-20T16:34:00.391616Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_size = 224\nbatch_size = 32\n\ndatagen_train = ImageDataGenerator(rescale=1./255,\n                                   horizontal_flip=True,\n                                   validation_split=0.20,\n                                   ) \n\ntrain_generator = datagen_train.flow_from_directory(\"../input/deep-learning-sszg529-bits-pilani/train_data/train_data/\",\n                                                    target_size=(img_size,img_size),\n                                                    batch_size=batch_size,\n                                                    class_mode='categorical',\n                                                    subset='training',\n                                                    shuffle=True) \n\nvalidation_generator = datagen_train.flow_from_directory(\"../input/deep-learning-sszg529-bits-pilani/train_data/train_data/\",\n                                                    target_size=(img_size,img_size),\n                                                    batch_size=batch_size,\n                                                    class_mode='categorical',\n                                                    subset='validation',\n                                                    shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:00.393956Z","iopub.execute_input":"2022-10-20T16:34:00.395539Z","iopub.status.idle":"2022-10-20T16:34:01.987564Z","shell.execute_reply.started":"2022-10-20T16:34:00.395502Z","shell.execute_reply":"2022-10-20T16:34:01.986664Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vggmodel = VGG16(weights='imagenet', include_top=True)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:01.988930Z","iopub.execute_input":"2022-10-20T16:34:01.989270Z","iopub.status.idle":"2022-10-20T16:34:05.384362Z","shell.execute_reply.started":"2022-10-20T16:34:01.989236Z","shell.execute_reply":"2022-10-20T16:34:05.383355Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vggmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:05.387799Z","iopub.execute_input":"2022-10-20T16:34:05.388154Z","iopub.status.idle":"2022-10-20T16:34:05.396421Z","shell.execute_reply.started":"2022-10-20T16:34:05.388120Z","shell.execute_reply":"2022-10-20T16:34:05.395437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for layers in (vggmodel.layers)[:19]:\n    print(layers)\n    layers.trainable = False","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:05.397879Z","iopub.execute_input":"2022-10-20T16:34:05.398594Z","iopub.status.idle":"2022-10-20T16:34:05.409470Z","shell.execute_reply.started":"2022-10-20T16:34:05.398557Z","shell.execute_reply":"2022-10-20T16:34:05.408006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = vggmodel.layers[-2].output\npredictions = Dense(5, activation=\"softmax\")(X)\nmodel_final = Model(inputs = vggmodel.input, outputs = predictions)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:05.411061Z","iopub.execute_input":"2022-10-20T16:34:05.411521Z","iopub.status.idle":"2022-10-20T16:34:05.432205Z","shell.execute_reply.started":"2022-10-20T16:34:05.411486Z","shell.execute_reply":"2022-10-20T16:34:05.431360Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_final.compile(loss = \"categorical_crossentropy\", optimizer = optimizers.SGD(learning_rate=0.0001, momentum=0.9), metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:05.433915Z","iopub.execute_input":"2022-10-20T16:34:05.434164Z","iopub.status.idle":"2022-10-20T16:34:05.445712Z","shell.execute_reply.started":"2022-10-20T16:34:05.434141Z","shell.execute_reply":"2022-10-20T16:34:05.444561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_final.summary()","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:05.447383Z","iopub.execute_input":"2022-10-20T16:34:05.447970Z","iopub.status.idle":"2022-10-20T16:34:05.455731Z","shell.execute_reply.started":"2022-10-20T16:34:05.447936Z","shell.execute_reply":"2022-10-20T16:34:05.454520Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import math\n\nsteps_per_epoch = math.ceil(train_generator.n//train_generator.batch_size)\nvalidation_steps = math.ceil(validation_generator.n//validation_generator.batch_size)\n\ncheckpoint = ModelCheckpoint(\"vgg16_1.h5\", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)\nearly = EarlyStopping(monitor='accuracy', min_delta=0, patience=3, verbose=1, mode='auto')\n\nepochs = 25\n\nhistory = model_final.fit(\n    x=train_generator, \n    steps_per_epoch=steps_per_epoch, \n    callbacks=[checkpoint, early],\n    epochs=epochs, \n    validation_data=validation_generator, \n    validation_steps=validation_steps\n)\n\n","metadata":{"execution":{"iopub.status.busy":"2022-10-20T16:34:05.457253Z","iopub.execute_input":"2022-10-20T16:34:05.457999Z","iopub.status.idle":"2022-10-20T17:04:12.624396Z","shell.execute_reply.started":"2022-10-20T16:34:05.457960Z","shell.execute_reply":"2022-10-20T17:04:12.621662Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Saving the model\nmodel_final.save('model1')","metadata":{"execution":{"iopub.status.busy":"2022-10-20T17:04:24.870580Z","iopub.execute_input":"2022-10-20T17:04:24.870958Z","iopub.status.idle":"2022-10-20T17:04:31.137110Z","shell.execute_reply.started":"2022-10-20T17:04:24.870926Z","shell.execute_reply":"2022-10-20T17:04:31.136068Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.models import load_model\nmodel = load_model('model1')","metadata":{"execution":{"iopub.status.busy":"2022-10-20T17:04:34.666560Z","iopub.execute_input":"2022-10-20T17:04:34.667624Z","iopub.status.idle":"2022-10-20T17:04:36.721590Z","shell.execute_reply.started":"2022-10-20T17:04:34.667586Z","shell.execute_reply":"2022-10-20T17:04:36.720633Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import csv\nimport numpy as np\nimport pandas as pd\n\n#Testing a file.\n\nresults = pd.DataFrame(columns=['id', 'Class'])\ncategory=[3,4,1,2,5]\nwith open(\"../input/deep-learning-sszg529-bits-pilani/test.csv\", 'r') as csvfile:\n    datareader = csv.reader(csvfile)\n    \n    next(datareader)\n    \n    for row in datareader:\n        print(row[1])\n        file=\"../input/deep-learning-sszg529-bits-pilani/test_data/test_data/\"+row[1]\n        true_image = image.load_img(file)\n        img = image.load_img(file, color_mode=\"rgb\", target_size=(224, 224))\n        x = image.img_to_array(img)\n        x = np.expand_dims(x, axis = 0)\n\n        x /= 255\n        result = model.predict(x)\n        results = results.append({\"id\":row[0],'Class':category[np.argmax(result)]}, ignore_index=True)\n       \n    results.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T17:05:50.766744Z","iopub.execute_input":"2022-10-20T17:05:50.767836Z","iopub.status.idle":"2022-10-20T17:08:36.578469Z","shell.execute_reply.started":"2022-10-20T17:05:50.767784Z","shell.execute_reply":"2022-10-20T17:08:36.577402Z"},"trusted":true},"execution_count":null,"outputs":[]}]}