{"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 keras,os\nfrom keras.models import Sequential #so that all layers are arranged in sequence\nfrom keras.layers import Dense, Conv2D, MaxPool2D , Flatten\nfrom keras.preprocessing.image import ImageDataGenerator\nimport numpy as np","metadata":{"id":"wwAX6PRKRJM4","execution":{"iopub.status.busy":"2023-03-29T22:49:54.825497Z","iopub.execute_input":"2023-03-29T22:49:54.826234Z","iopub.status.idle":"2023-03-29T22:49:54.832047Z","shell.execute_reply.started":"2023-03-29T22:49:54.826196Z","shell.execute_reply":"2023-03-29T22:49:54.831049Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train_dir = \"/kaggle/input/final-masked/content/drive/Shareddrives/ML_project/hotel-id-to-combat-human-trafficking-2022/extra_output\"\ntrain_dir = '/kaggle/input/hotel-id-to-combat-human-trafficking-2022-fgvc9/train_images'\ndatagen = ImageDataGenerator(validation_split=0.2)\n\ntrain_generator = datagen.flow_from_directory(\n    train_dir,\n    target_size=(224, 224),\n    batch_size=32,\n    class_mode='categorical',\n    subset='training')\n\nval_generator = datagen.flow_from_directory(\n    train_dir,\n    target_size=(224, 224),\n    batch_size=32,\n    class_mode='categorical',\n    subset='validation')\n\n\n# val_generator = datagen.flow_from_directory(\n#     train_dir,\n#     target_size=(224, 224),\n#     batch_size=32,\n#     class_mode='categorical',\n#     subset='validation',\n#     shuffle=False)\n\n# # Obtain the validation features and labels\n# val_features, val_labels = val_generator.next()\n","metadata":{"id":"tJbrxKhv9Zs8","outputId":"058f1782-2036-4267-f6c3-ca940d3d2797","execution":{"iopub.status.busy":"2023-03-29T22:52:35.848036Z","iopub.execute_input":"2023-03-29T22:52:35.848990Z","iopub.status.idle":"2023-03-29T22:52:59.875151Z","shell.execute_reply.started":"2023-03-29T22:52:35.848933Z","shell.execute_reply":"2023-03-29T22:52:59.874126Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#CNN model","metadata":{"id":"CGhzB8VlAGaZ"}},{"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(input_shape=(224,224,3),filters=64,kernel_size=(3,3),padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPool2D(pool_size=(2,2),strides=(2,2)))\n#Add fully connected layers\nmodel.add(Flatten())\nmodel.add(Dense(units=4096,activation=\"relu\"))\nmodel.add(Dense(units=4096,activation=\"relu\"))\nmodel.add(Dense(units=3116, activation=\"softmax\"))\n#Show the structure of the CNN\nmodel.summary()","metadata":{"id":"diWSxxbJ_o9G","outputId":"be45210a-5211-41ed-c9ba-e40496c65fa4","execution":{"iopub.status.busy":"2023-03-19T12:36:22.625910Z","iopub.execute_input":"2023-03-19T12:36:22.626274Z","iopub.status.idle":"2023-03-19T12:36:22.861979Z","shell.execute_reply.started":"2023-03-19T12:36:22.626242Z","shell.execute_reply":"2023-03-19T12:36:22.861202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Optimization to reach global minima during training","metadata":{"id":"kxZ_qV4u_5l2"}},{"cell_type":"code","source":"from keras.optimizers import Adam\nopt = Adam(learning_rate=0.001)\nmodel.compile(optimizer=opt, loss=keras.losses.categorical_crossentropy, metrics=['accuracy'])","metadata":{"id":"7F8ur7Re_qC7","execution":{"iopub.status.busy":"2023-03-19T12:36:26.657399Z","iopub.execute_input":"2023-03-19T12:36:26.658428Z","iopub.status.idle":"2023-03-19T12:36:26.669808Z","shell.execute_reply.started":"2023-03-19T12:36:26.658378Z","shell.execute_reply":"2023-03-19T12:36:26.668733Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#Monitoring validation accuracy\nThe model will only be saved to disk if the validation accuracy of the model in current epoch is greater than what it was in the last epoch.","metadata":{"id":"uJg1XSayAaY5"}},{"cell_type":"code","source":"from keras.callbacks import ModelCheckpoint, EarlyStopping\ncheckpoint = ModelCheckpoint(\"vgg16_1.h5\", monitor='val_loss', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', save_freq=1)\n#early = EarlyStopping(monitor='val_loss', min_delta=0, patience=20, verbose=1, mode='auto')\nhist = model.fit(train_generator, epochs=150, steps_per_epoch=100, validation_data=val_generator, validation_steps=10)\n\n\n# hist = model.fit(train_generator, epochs=1, steps_per_epoch=2, validation_data=val_generator, validation_steps=10, callbacks=[checkpoint, early])\n# for key in hist.history:\n#   print(key)\n#hist = model.fit(train_generator, epochs=100, validation_data=(val_features, val_labels), callbacks=[checkpoint, early])\n\n#hist = model.fit(train_generator, epochs=100, steps_per_epoch=100, validation_data=(val_features, val_labels), callbacks=[checkpoint, early])\n\n#hist = model.fit(train_generator, epochs=10, steps_per_epoch=8, validation_data=(val_features, val_labels), callbacks=[checkpoint, early])\n\n# hist = model.fit(train_generator, epochs=10, steps_per_epoch=100, validation_data=val_generator, validation_steps=10, callbacks=[checkpoint, early])\n# hist = model.fit_generator(steps_per_epoch=8,generator=train_generator, validation_data= val_generator, validation_steps=10,epochs=10,callbacks=[checkpoint,early])","metadata":{"id":"UOIa2PryAiCA","outputId":"aaaeb5f7-df04-42d2-89e6-e796636aa9cb","execution":{"iopub.status.busy":"2023-03-19T12:36:29.947674Z","iopub.execute_input":"2023-03-19T12:36:29.948368Z","iopub.status.idle":"2023-03-19T20:57:21.360995Z","shell.execute_reply.started":"2023-03-19T12:36:29.948332Z","shell.execute_reply":"2023-03-19T20:57:21.358133Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Save the model**","metadata":{}},{"cell_type":"code","source":"model.save(\"second_model.h5\")\n","metadata":{"execution":{"iopub.status.busy":"2023-03-19T20:57:35.141608Z","iopub.execute_input":"2023-03-19T20:57:35.142619Z","iopub.status.idle":"2023-03-19T20:57:42.585996Z","shell.execute_reply.started":"2023-03-19T20:57:35.142579Z","shell.execute_reply":"2023-03-19T20:57:42.584730Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Saving as json file**","metadata":{}},{"cell_type":"code","source":"from keras.models import model_from_json\n# serialize model to json\njson_model = model.to_json()\n#save the model architecture to JSON file\nwith open('second_model.json', 'w') as json_file:\n    json_file.write(json_model)\n#saving the weights of the model\nmodel.save_weights('second_model_weights.h5')\n#Model loss and accuracy\n#loss,acc = model.evaluate(test_images,  test_labels, verbose=2)","metadata":{"execution":{"iopub.status.busy":"2023-03-19T20:57:42.591916Z","iopub.execute_input":"2023-03-19T20:57:42.592228Z","iopub.status.idle":"2023-03-19T20:57:44.366072Z","shell.execute_reply.started":"2023-03-19T20:57:42.592200Z","shell.execute_reply":"2023-03-19T20:57:44.364715Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Creating zip folder**","metadata":{}},{"cell_type":"code","source":"!zip -r file.zip \"/kaggle/working/try_model.h5\"","metadata":{"execution":{"iopub.status.busy":"2023-03-13T23:20:20.405598Z","iopub.execute_input":"2023-03-13T23:20:20.406082Z","iopub.status.idle":"2023-03-13T23:22:17.298812Z","shell.execute_reply.started":"2023-03-13T23:20:20.406034Z","shell.execute_reply":"2023-03-13T23:22:17.296668Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Load json file**","metadata":{}},{"cell_type":"code","source":"# load json and create model\njson_file = open('second_model.json', 'r')\nloaded_model_json = json_file.read()\njson_file.close()\nloaded_model = model_from_json(loaded_model_json)\n# load weights into new model\nloaded_model.load_weights(\"second_model.h5\")","metadata":{"execution":{"iopub.status.busy":"2023-03-19T21:05:18.294567Z","iopub.execute_input":"2023-03-19T21:05:18.294965Z","iopub.status.idle":"2023-03-19T21:05:19.444087Z","shell.execute_reply.started":"2023-03-19T21:05:18.294932Z","shell.execute_reply":"2023-03-19T21:05:19.443008Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Load the model**","metadata":{}},{"cell_type":"code","source":"from tensorflow.keras.models import load_model\nloaded_model = load_model(\"second_model.h5\")\nloaded_model.summary()","metadata":{"execution":{"iopub.status.busy":"2023-03-19T21:05:30.820360Z","iopub.execute_input":"2023-03-19T21:05:30.821067Z","iopub.status.idle":"2023-03-19T21:05:41.109172Z","shell.execute_reply.started":"2023-03-19T21:05:30.821029Z","shell.execute_reply":"2023-03-19T21:05:41.108302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Removing unwanted files**","metadata":{}},{"cell_type":"code","source":"os.remove(\"/kaggle/working/file.zip\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Accuracy","metadata":{}},{"cell_type":"code","source":"scores = model.evaluate(val_generator)\nprint(\"\\n%s: %.2f%%\" % (model.metrics_names[1], scores[1]*100))\n\nprint(\"SUMMARY--\")\nprint(model.summary())","metadata":{"execution":{"iopub.status.busy":"2023-03-19T21:56:51.597844Z","iopub.execute_input":"2023-03-19T21:56:51.598391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow import keras\n\n# Load the saved model\nmodel = keras.models.load_model('/kaggle/input/try-model/try_model.h5')\n\n# Evaluate the model on your validation data generator\nscores = model.evaluate(val_generator)\n\n# Print the accuracy score\nprint(\"\\n%s: %.2f%%\" % (model.metrics_names[1], scores[1]*100))\n\n# Print the model summary\nprint(\"SUMMARY--\")\nprint(model.summary())\n","metadata":{"execution":{"iopub.status.busy":"2023-03-29T22:53:12.558695Z","iopub.execute_input":"2023-03-29T22:53:12.559389Z","iopub.status.idle":"2023-03-29T23:00:45.910946Z","shell.execute_reply.started":"2023-03-29T22:53:12.559353Z","shell.execute_reply":"2023-03-29T23:00:45.910132Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#Visualise training/validation accuracy and loss","metadata":{"id":"qUEi49qIAtVC"}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nplt.plot(hist.history[\"accuracy\"])\nplt.plot(hist.history['val_accuracy'])\nplt.plot(hist.history['loss'])\nplt.plot(hist.history['val_loss'])\nplt.title(\"model accuracy\")\nplt.ylabel(\"Accuracy\")\nplt.xlabel(\"Epoch\")\nplt.legend([\"Accuracy\",\"Validation Accuracy\",\"loss\",\"Validation Loss\"])\nplt.show()","metadata":{"id":"-OhT5JgLAtoU","outputId":"1db80900-a3b7-4156-c3d4-44f0795a430f","execution":{"iopub.status.busy":"2023-03-29T23:02:59.515564Z","iopub.execute_input":"2023-03-29T23:02:59.516613Z","iopub.status.idle":"2023-03-29T23:02:59.543322Z","shell.execute_reply.started":"2023-03-29T23:02:59.516561Z","shell.execute_reply":"2023-03-29T23:02:59.541068Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import json\nimport matplotlib.pyplot as plt\n\n# Load the history from a JSON file\ndir_json = '/kaggle/input/try-model-json/fashionmnist_model.json'\nwith open(dir_json, 'r') as file:\n    history = json.load(file)\n\n# Plot the training and validation accuracy and loss curves\nplt.plot(history['accuracy'])\nplt.plot(history['val_accuracy'])\nplt.plot(history['loss'])\nplt.plot(history['val_loss'])\nplt.title('Model accuracy and loss')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy/Loss')\nplt.legend(['Train accuracy', 'Validation accuracy', 'Train loss', 'Validation loss'], loc='best')\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-03-29T23:09:47.338615Z","iopub.execute_input":"2023-03-29T23:09:47.339766Z","iopub.status.idle":"2023-03-29T23:09:47.373201Z","shell.execute_reply.started":"2023-03-29T23:09:47.339702Z","shell.execute_reply":"2023-03-29T23:09:47.371697Z"},"trusted":true},"execution_count":null,"outputs":[]}]}