Upload Model_training.ipynb
Browse files- Model_training.ipynb +1 -0
Model_training.ipynb
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"4_p0qRnDs0Kw","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1747993014447,"user_tz":-300,"elapsed":18492,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"}},"outputId":"0a93e014-bd61-47a6-ccc0-c20803678495"},"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')\n"]},{"cell_type":"code","execution_count":1,"metadata":{"executionInfo":{"elapsed":3554,"status":"ok","timestamp":1752960564747,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"},"user_tz":-300},"id":"EHX0PZYdtAcp"},"outputs":[],"source":["import tensorflow as tf\n","from tensorflow.keras.preprocessing.image import ImageDataGenerator\n","from tensorflow.keras import layers, models\n","import matplotlib.pyplot as plt\n"]},{"cell_type":"code","execution_count":2,"metadata":{"id":"eKchN0tStAgm","executionInfo":{"status":"ok","timestamp":1752960564778,"user_tz":-300,"elapsed":10,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"}}},"outputs":[],"source":["# Update this to your actual path in Drive\n","data_dir = '/content/drive/MyDrive/ASE/eiffel'\n","\n","train_dir = f\"{data_dir}/train\"\n","val_dir = f\"{data_dir}/val\"\n"]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2173,"status":"ok","timestamp":1752960566955,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"},"user_tz":-300},"id":"ytuPTAtOtAjS","outputId":"83fed7ba-d96e-4365-f050-17af2c3d5e97"},"outputs":[{"output_type":"stream","name":"stdout","text":["Found 146 images belonging to 2 classes.\n","Found 45 images belonging to 2 classes.\n"]}],"source":["img_height, img_width = 224, 224\n","batch_size = 64\n","\n","train_datagen = ImageDataGenerator(rescale=1./255)\n","val_datagen = ImageDataGenerator(rescale=1./255)\n","\n","train_gen = train_datagen.flow_from_directory(\n"," train_dir,\n"," target_size=(img_height, img_width),\n"," batch_size=batch_size,\n"," class_mode='binary'\n",")\n","\n","val_gen = val_datagen.flow_from_directory(\n"," val_dir,\n"," target_size=(img_height, img_width),\n"," batch_size=batch_size,\n"," class_mode='binary'\n",")\n"]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2718,"status":"ok","timestamp":1752960569691,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"},"user_tz":-300},"id":"2yZjqPrVtAl1","outputId":"645e5b4c-3490-40f6-d738-5c98e88cdc55"},"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.11/dist-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n"," super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"]}],"source":["model = models.Sequential([\n"," layers.Conv2D(32, (3,3), activation='relu', input_shape=(img_height, img_width, 3)),\n"," layers.MaxPooling2D(2, 2),\n","\n"," layers.Conv2D(64, (3,3), activation='relu'),\n"," layers.MaxPooling2D(2, 2),\n","\n"," layers.Conv2D(128, (3,3), activation='relu'),\n"," layers.MaxPooling2D(2, 2),\n","\n"," layers.Flatten(),\n"," layers.Dense(128, activation='relu'),\n"," layers.Dense(1, activation='sigmoid') # binary classification\n","])\n","\n","model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":119338,"status":"ok","timestamp":1752960689079,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"},"user_tz":-300},"id":"rnp0KpK6tAog","outputId":"1256e053-fd7a-4e51-a464-a6a4bc4c0364"},"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.11/dist-packages/keras/src/trainers/data_adapters/py_dataset_adapter.py:121: UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored.\n"," self._warn_if_super_not_called()\n"]},{"output_type":"stream","name":"stdout","text":["Epoch 1/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 13s/step - accuracy: 0.5323 - loss: 0.9821 - val_accuracy: 0.5333 - val_loss: 1.4158\n","Epoch 2/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 338ms/step - accuracy: 0.5310 - loss: 1.2806 - val_accuracy: 0.4667 - val_loss: 0.8127\n","Epoch 3/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 265ms/step - accuracy: 0.5210 - loss: 0.7382 - val_accuracy: 0.6444 - val_loss: 0.6205\n","Epoch 4/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 422ms/step - accuracy: 0.6184 - loss: 0.6210 - val_accuracy: 0.8222 - val_loss: 0.5059\n","Epoch 5/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 331ms/step - accuracy: 0.7443 - loss: 0.5193 - val_accuracy: 0.6889 - val_loss: 0.5503\n","Epoch 6/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 422ms/step - accuracy: 0.7366 - loss: 0.4628 - val_accuracy: 0.8444 - val_loss: 0.4129\n","Epoch 7/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 282ms/step - accuracy: 0.7985 - loss: 0.4302 - val_accuracy: 0.8222 - val_loss: 0.4259\n","Epoch 8/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 410ms/step - accuracy: 0.7872 - loss: 0.3921 - val_accuracy: 0.8444 - val_loss: 0.3396\n","Epoch 9/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 473ms/step - accuracy: 0.8529 - loss: 0.3496 - val_accuracy: 0.8889 - val_loss: 0.3500\n","Epoch 10/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 334ms/step - accuracy: 0.8988 - loss: 0.2897 - val_accuracy: 0.9111 - val_loss: 0.2776\n","Epoch 11/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 346ms/step - accuracy: 0.9312 - loss: 0.2328 - val_accuracy: 0.9556 - val_loss: 0.2446\n","Epoch 12/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 304ms/step - accuracy: 0.9220 - loss: 0.2205 - val_accuracy: 0.9111 - val_loss: 0.1907\n","Epoch 13/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 421ms/step - accuracy: 0.8974 - loss: 0.2301 - val_accuracy: 0.9778 - val_loss: 0.1671\n","Epoch 14/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 275ms/step - accuracy: 0.9873 - loss: 0.1592 - val_accuracy: 0.9556 - val_loss: 0.2989\n","Epoch 15/15\n","\u001b[1m3/3\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 413ms/step - accuracy: 0.9528 - loss: 0.1791 - val_accuracy: 0.9556 - val_loss: 0.1925\n"]}],"source":["history = model.fit(\n"," train_gen,\n"," epochs=15,\n"," validation_data=val_gen\n",")\n"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":8049,"status":"ok","timestamp":1752960697133,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"},"user_tz":-300},"id":"UC_Y4tnCtArT","outputId":"ced1025e-b20e-4a99-8958-f13158683330"},"outputs":[{"output_type":"stream","name":"stderr","text":["WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n"]}],"source":["model.save('/content/drive/MyDrive/ASE/eiffel/eiffel_model3.h5')\n"]},{"cell_type":"code","execution_count":7,"metadata":{"executionInfo":{"elapsed":7095,"status":"ok","timestamp":1752960704257,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"},"user_tz":-300},"id":"kuUdjwGCtAwQ"},"outputs":[],"source":["!pip install -q gradio\n"]},{"cell_type":"code","execution_count":8,"metadata":{"id":"wyMQsPuOvHz9","colab":{"base_uri":"https://localhost:8080/","height":632},"executionInfo":{"status":"ok","timestamp":1752960715063,"user_tz":-300,"elapsed":10792,"user":{"displayName":"Asadullah Indhar","userId":"16235085610250713593"}},"outputId":"2153fbe0-bd6b-4ae8-e9be-f1dd1b28a8d2"},"outputs":[{"output_type":"stream","name":"stderr","text":["WARNING:absl:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.\n"]},{"output_type":"stream","name":"stdout","text":["Colab notebook detected. To show errors in colab notebook, set debug=True in launch()\n","* Running on public URL: https://5c1b9157796c10907b.gradio.live\n","\n","This share link expires in 1 week. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n"]},{"output_type":"display_data","data":{"text/plain":["<IPython.core.display.HTML object>"],"text/html":["<div><iframe src=\"https://5c1b9157796c10907b.gradio.live\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"]},"metadata":{}},{"output_type":"execute_result","data":{"text/plain":[]},"metadata":{},"execution_count":8}],"source":["import gradio as gr\n","import numpy as np\n","from tensorflow.keras.preprocessing import image\n","from tensorflow.keras.models import load_model\n","\n","# Load trained model\n","model = load_model('/content/drive/MyDrive/ASE/eiffel/eiffel_model3.h5')\n","\n","# Image size used in training\n","img_height, img_width = 224, 224\n","\n","# Prediction function\n","def predict_burj(img):\n"," img = img.resize((img_height, img_width))\n"," img_array = image.img_to_array(img) / 255.0\n"," img_array = np.expand_dims(img_array, axis=0)\n","\n"," prediction = model.predict(img_array)[0][0]\n"," return \"Not Eiffel Tower\" if prediction > 0.5 else \"Eiffel Tower\"\n","\n","# Example image paths (you can upload your images here first)\n","examples = [\n"," \"/content/drive/MyDrive/ASE/eiffel/train/eiffel_tower/download (10).jpeg\",\n"," \"/content/drive/MyDrive/ASE/eiffel/train/eiffel_tower/download (15).jpeg\",\n"," \"/content/drive/MyDrive/ASE/eiffel/train/not_eiffel_tower/burj-khalifa-377994_640.jpg\",\n"," \"/content/drive/MyDrive/ASE/eiffel/val/not_eiffel_tower/download (1).jpeg\"\n","]\n","\n","# Gradio interface\n","interface = gr.Interface(\n"," fn=predict_burj,\n"," inputs=gr.Image(type=\"pil\"),\n"," outputs=\"text\",\n"," title=\"Eiffel Tower Classifier\",\n"," description=\"Upload an image to check if it's Eiffel Tower or not.\",\n"," examples=examples\n",")\n","\n","# Launch app\n","interface.launch(share=True) # share=True gives public link in Colab\n"]},{"cell_type":"code","source":[],"metadata":{"id":"afOAVrScl4TE"},"execution_count":null,"outputs":[]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"T4","provenance":[],"mount_file_id":"1lCkI-GYSqov1fGE3E_NWBNwqnkMYUcOu","authorship_tag":"ABX9TyOUShjVufCuAWqOc5Ko417y"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0}
|