Mirror of github.com/Abhisingh18/Image-Classification-Project
Browse files- Cats_v_Dogs_cllassification.ipynb +446 -0
- README.md +2 -0
Cats_v_Dogs_cllassification.ipynb
ADDED
|
@@ -0,0 +1,446 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": null,
|
| 6 |
+
"metadata": {
|
| 7 |
+
"colab": {
|
| 8 |
+
"base_uri": "https://localhost:8080/"
|
| 9 |
+
},
|
| 10 |
+
"id": "9KsncGm-p90B",
|
| 11 |
+
"outputId": "adf91a72-da16-45d1-d7c0-81d03f8c05ca"
|
| 12 |
+
},
|
| 13 |
+
"outputs": [
|
| 14 |
+
{
|
| 15 |
+
"name": "stdout",
|
| 16 |
+
"output_type": "stream",
|
| 17 |
+
"text": [
|
| 18 |
+
"cp: cannot stat 'kaggle.json': No such file or directory\n"
|
| 19 |
+
]
|
| 20 |
+
}
|
| 21 |
+
],
|
| 22 |
+
"source": [
|
| 23 |
+
"!mkdir -p ~/.kaggle\n",
|
| 24 |
+
"!cp kaggle.json ~/.kaggle/"
|
| 25 |
+
]
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"cell_type": "code",
|
| 29 |
+
"execution_count": null,
|
| 30 |
+
"metadata": {
|
| 31 |
+
"colab": {
|
| 32 |
+
"base_uri": "https://localhost:8080/"
|
| 33 |
+
},
|
| 34 |
+
"id": "epMkM_TppxYe",
|
| 35 |
+
"outputId": "5d8294fe-628f-4b35-fa21-ddffabc275d3"
|
| 36 |
+
},
|
| 37 |
+
"outputs": [
|
| 38 |
+
{
|
| 39 |
+
"name": "stdout",
|
| 40 |
+
"output_type": "stream",
|
| 41 |
+
"text": [
|
| 42 |
+
"Dataset URL: https://www.kaggle.com/datasets/salader/dogs-vs-cats\n",
|
| 43 |
+
"License(s): unknown\n",
|
| 44 |
+
"Downloading dogs-vs-cats.zip to /content\n",
|
| 45 |
+
"100% 1.06G/1.06G [00:07<00:00, 102MB/s] \n",
|
| 46 |
+
"100% 1.06G/1.06G [00:07<00:00, 147MB/s]\n"
|
| 47 |
+
]
|
| 48 |
+
}
|
| 49 |
+
],
|
| 50 |
+
"source": [
|
| 51 |
+
"#kallge ka api command hai ..isse ka use kerke kaggle ka data directly fetch ker sakte hai\n",
|
| 52 |
+
"!kaggle datasets download -d salader/dogs-vs-cats"
|
| 53 |
+
]
|
| 54 |
+
},
|
| 55 |
+
{
|
| 56 |
+
"cell_type": "code",
|
| 57 |
+
"execution_count": null,
|
| 58 |
+
"metadata": {
|
| 59 |
+
"id": "QvlIgcpto4Yq"
|
| 60 |
+
},
|
| 61 |
+
"outputs": [],
|
| 62 |
+
"source": [
|
| 63 |
+
"#ab humare pass jo data aaaya hai ushko unzip kerna padega\n",
|
| 64 |
+
"import zipfile\n",
|
| 65 |
+
"zip_ref = zipfile.ZipFile('/content/dogs-vs-cats.zip', \"r\")\n",
|
| 66 |
+
"zip_ref.extractall('/content')\n",
|
| 67 |
+
"zip_ref.close()"
|
| 68 |
+
]
|
| 69 |
+
},
|
| 70 |
+
{
|
| 71 |
+
"cell_type": "code",
|
| 72 |
+
"execution_count": null,
|
| 73 |
+
"metadata": {
|
| 74 |
+
"id": "Rk5hM0ffrMcY"
|
| 75 |
+
},
|
| 76 |
+
"outputs": [],
|
| 77 |
+
"source": [
|
| 78 |
+
"import tensorflow as tf\n",
|
| 79 |
+
"from tensorflow import keras\n",
|
| 80 |
+
"from keras import Sequential\n",
|
| 81 |
+
"from keras.layers import Dense,Conv2D, MaxPooling2D ,Flatten"
|
| 82 |
+
]
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"cell_type": "code",
|
| 86 |
+
"execution_count": null,
|
| 87 |
+
"metadata": {
|
| 88 |
+
"colab": {
|
| 89 |
+
"base_uri": "https://localhost:8080/"
|
| 90 |
+
},
|
| 91 |
+
"id": "UzXicNVEro9K",
|
| 92 |
+
"outputId": "07a616bd-0efe-4614-9feb-ab0d7499a89a"
|
| 93 |
+
},
|
| 94 |
+
"outputs": [
|
| 95 |
+
{
|
| 96 |
+
"name": "stdout",
|
| 97 |
+
"output_type": "stream",
|
| 98 |
+
"text": [
|
| 99 |
+
"Found 20000 files belonging to 2 classes.\n",
|
| 100 |
+
"Found 5000 files belonging to 2 classes.\n"
|
| 101 |
+
]
|
| 102 |
+
}
|
| 103 |
+
],
|
| 104 |
+
"source": [
|
| 105 |
+
"import tensorflow as tf\n",
|
| 106 |
+
"from tensorflow import keras\n",
|
| 107 |
+
"\n",
|
| 108 |
+
"train_ds = keras.utils.image_dataset_from_directory(\n",
|
| 109 |
+
" directory='/content/train',\n",
|
| 110 |
+
" labels='inferred', # Fixed spelling\n",
|
| 111 |
+
" label_mode='int',\n",
|
| 112 |
+
" batch_size=32,\n",
|
| 113 |
+
" image_size=(256, 256)\n",
|
| 114 |
+
")\n",
|
| 115 |
+
"\n",
|
| 116 |
+
"validation_ds = keras.utils.image_dataset_from_directory(\n",
|
| 117 |
+
" directory='/content/test',\n",
|
| 118 |
+
" labels='inferred', # Fixed spelling\n",
|
| 119 |
+
" label_mode='int',\n",
|
| 120 |
+
" batch_size=32,\n",
|
| 121 |
+
" image_size=(256, 256)\n",
|
| 122 |
+
")\n"
|
| 123 |
+
]
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"cell_type": "code",
|
| 127 |
+
"execution_count": null,
|
| 128 |
+
"metadata": {
|
| 129 |
+
"id": "qp8_aex6tz41"
|
| 130 |
+
},
|
| 131 |
+
"outputs": [],
|
| 132 |
+
"source": [
|
| 133 |
+
"#normalize\n",
|
| 134 |
+
"def process(image, label):\n",
|
| 135 |
+
" image = tf.cast(image/255. , tf.float32)\n",
|
| 136 |
+
" return image, label\n",
|
| 137 |
+
"\n",
|
| 138 |
+
"train_ds= train_ds.map(process)\n",
|
| 139 |
+
"validation_ds = validation_ds.map(process)"
|
| 140 |
+
]
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"cell_type": "code",
|
| 144 |
+
"execution_count": null,
|
| 145 |
+
"metadata": {
|
| 146 |
+
"colab": {
|
| 147 |
+
"base_uri": "https://localhost:8080/"
|
| 148 |
+
},
|
| 149 |
+
"id": "kDJ2DOJXu_TC",
|
| 150 |
+
"outputId": "599d1759-18cb-42ce-cf5c-b34cc5947b2e"
|
| 151 |
+
},
|
| 152 |
+
"outputs": [
|
| 153 |
+
{
|
| 154 |
+
"name": "stderr",
|
| 155 |
+
"output_type": "stream",
|
| 156 |
+
"text": [
|
| 157 |
+
"/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",
|
| 158 |
+
" super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"
|
| 159 |
+
]
|
| 160 |
+
}
|
| 161 |
+
],
|
| 162 |
+
"source": [
|
| 163 |
+
"#create cnn model\n",
|
| 164 |
+
"model = Sequential()\n",
|
| 165 |
+
"model.add(Conv2D(32, kernel_size =(3,3), activation = 'relu', padding = \"valid\", input_shape = (256,256,3) ))\n",
|
| 166 |
+
"model.add(MaxPooling2D(pool_size = (2,2),strides = 2, padding = 'valid' ))\n",
|
| 167 |
+
"\n",
|
| 168 |
+
"model.add(Conv2D(64, kernel_size =(3,3), activation = 'relu', padding = \"valid\" ))\n",
|
| 169 |
+
"model.add(MaxPooling2D(pool_size = (2,2),strides = 2, padding = 'valid' ))\n",
|
| 170 |
+
"\n",
|
| 171 |
+
"model.add(Conv2D(128, kernel_size =(3,3), activation = 'relu', padding = \"valid\"))\n",
|
| 172 |
+
"model.add(MaxPooling2D(pool_size = (2,2),strides = 2, padding = 'valid' ))\n",
|
| 173 |
+
"\n",
|
| 174 |
+
"model.add(Flatten())\n",
|
| 175 |
+
"model.add(Dense(128,activation = 'relu'))\n",
|
| 176 |
+
"model.add(Dense(64, activation = 'relu'))\n",
|
| 177 |
+
"model.add(Dense(1, activation = 'sigmoid'))"
|
| 178 |
+
]
|
| 179 |
+
},
|
| 180 |
+
{
|
| 181 |
+
"cell_type": "code",
|
| 182 |
+
"execution_count": null,
|
| 183 |
+
"metadata": {
|
| 184 |
+
"colab": {
|
| 185 |
+
"base_uri": "https://localhost:8080/",
|
| 186 |
+
"height": 476
|
| 187 |
+
},
|
| 188 |
+
"id": "DwLn_WKvvUL9",
|
| 189 |
+
"outputId": "399fd888-3031-4f08-effa-d407527d3fa0"
|
| 190 |
+
},
|
| 191 |
+
"outputs": [
|
| 192 |
+
{
|
| 193 |
+
"data": {
|
| 194 |
+
"text/html": [
|
| 195 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
|
| 196 |
+
"</pre>\n"
|
| 197 |
+
],
|
| 198 |
+
"text/plain": [
|
| 199 |
+
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
|
| 200 |
+
]
|
| 201 |
+
},
|
| 202 |
+
"metadata": {},
|
| 203 |
+
"output_type": "display_data"
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"data": {
|
| 207 |
+
"text/html": [
|
| 208 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">ββββββββββββββββββββββββββββββββββββββββ³ββββββββββββββββββββββββββββββ³ββββββββββββββββββ\n",
|
| 209 |
+
"β<span style=\"font-weight: bold\"> Layer (type) </span>β<span style=\"font-weight: bold\"> Output Shape </span>β<span style=\"font-weight: bold\"> Param # </span>β\n",
|
| 210 |
+
"β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©\n",
|
| 211 |
+
"β conv2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">254</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">254</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">896</span> β\n",
|
| 212 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 213 |
+
"β max_pooling2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">127</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">127</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> β\n",
|
| 214 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 215 |
+
"β conv2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">125</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">125</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">18,496</span> β\n",
|
| 216 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 217 |
+
"β max_pooling2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">62</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">62</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> β\n",
|
| 218 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 219 |
+
"β conv2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">60</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">60</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">73,856</span> β\n",
|
| 220 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 221 |
+
"β max_pooling2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">30</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">30</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> β\n",
|
| 222 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 223 |
+
"β flatten (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">115200</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> β\n",
|
| 224 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 225 |
+
"β dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">14,745,728</span> β\n",
|
| 226 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 227 |
+
"β dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">8,256</span> β\n",
|
| 228 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 229 |
+
"β dense_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) β (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) β <span style=\"color: #00af00; text-decoration-color: #00af00\">65</span> β\n",
|
| 230 |
+
"βββββββββββββββοΏ½οΏ½ββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄ββββββββββββββββββ\n",
|
| 231 |
+
"</pre>\n"
|
| 232 |
+
],
|
| 233 |
+
"text/plain": [
|
| 234 |
+
"ββββββββββββββββββββββββββββββββββββββββ³ββββββββββββββββββββββββββββββ³ββββββββββββββββββ\n",
|
| 235 |
+
"β\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0mβ\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0mβ\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0mβ\n",
|
| 236 |
+
"β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©\n",
|
| 237 |
+
"β conv2d (\u001b[38;5;33mConv2D\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m254\u001b[0m, \u001b[38;5;34m254\u001b[0m, \u001b[38;5;34m32\u001b[0m) β \u001b[38;5;34m896\u001b[0m β\n",
|
| 238 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 239 |
+
"β max_pooling2d (\u001b[38;5;33mMaxPooling2D\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m127\u001b[0m, \u001b[38;5;34m127\u001b[0m, \u001b[38;5;34m32\u001b[0m) β \u001b[38;5;34m0\u001b[0m β\n",
|
| 240 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 241 |
+
"β conv2d_1 (\u001b[38;5;33mConv2D\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m125\u001b[0m, \u001b[38;5;34m125\u001b[0m, \u001b[38;5;34m64\u001b[0m) β \u001b[38;5;34m18,496\u001b[0m β\n",
|
| 242 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 243 |
+
"β max_pooling2d_1 (\u001b[38;5;33mMaxPooling2D\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m62\u001b[0m, \u001b[38;5;34m62\u001b[0m, \u001b[38;5;34m64\u001b[0m) β \u001b[38;5;34m0\u001b[0m β\n",
|
| 244 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 245 |
+
"β conv2d_2 (\u001b[38;5;33mConv2D\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m60\u001b[0m, \u001b[38;5;34m60\u001b[0m, \u001b[38;5;34m128\u001b[0m) β \u001b[38;5;34m73,856\u001b[0m β\n",
|
| 246 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 247 |
+
"β max_pooling2d_2 (\u001b[38;5;33mMaxPooling2D\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m128\u001b[0m) β \u001b[38;5;34m0\u001b[0m β\n",
|
| 248 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 249 |
+
"β flatten (\u001b[38;5;33mFlatten\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m115200\u001b[0m) β \u001b[38;5;34m0\u001b[0m β\n",
|
| 250 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 251 |
+
"β dense (\u001b[38;5;33mDense\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) β \u001b[38;5;34m14,745,728\u001b[0m β\n",
|
| 252 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 253 |
+
"β dense_1 (\u001b[38;5;33mDense\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) β \u001b[38;5;34m8,256\u001b[0m β\n",
|
| 254 |
+
"ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
|
| 255 |
+
"β dense_2 (\u001b[38;5;33mDense\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) β \u001b[38;5;34m65\u001b[0m β\n",
|
| 256 |
+
"ββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄ββββββββββββββββββ\n"
|
| 257 |
+
]
|
| 258 |
+
},
|
| 259 |
+
"metadata": {},
|
| 260 |
+
"output_type": "display_data"
|
| 261 |
+
},
|
| 262 |
+
{
|
| 263 |
+
"data": {
|
| 264 |
+
"text/html": [
|
| 265 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">14,847,297</span> (56.64 MB)\n",
|
| 266 |
+
"</pre>\n"
|
| 267 |
+
],
|
| 268 |
+
"text/plain": [
|
| 269 |
+
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m14,847,297\u001b[0m (56.64 MB)\n"
|
| 270 |
+
]
|
| 271 |
+
},
|
| 272 |
+
"metadata": {},
|
| 273 |
+
"output_type": "display_data"
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"data": {
|
| 277 |
+
"text/html": [
|
| 278 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">14,847,297</span> (56.64 MB)\n",
|
| 279 |
+
"</pre>\n"
|
| 280 |
+
],
|
| 281 |
+
"text/plain": [
|
| 282 |
+
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m14,847,297\u001b[0m (56.64 MB)\n"
|
| 283 |
+
]
|
| 284 |
+
},
|
| 285 |
+
"metadata": {},
|
| 286 |
+
"output_type": "display_data"
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"data": {
|
| 290 |
+
"text/html": [
|
| 291 |
+
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
|
| 292 |
+
"</pre>\n"
|
| 293 |
+
],
|
| 294 |
+
"text/plain": [
|
| 295 |
+
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
|
| 296 |
+
]
|
| 297 |
+
},
|
| 298 |
+
"metadata": {},
|
| 299 |
+
"output_type": "display_data"
|
| 300 |
+
}
|
| 301 |
+
],
|
| 302 |
+
"source": [
|
| 303 |
+
"model.summary()"
|
| 304 |
+
]
|
| 305 |
+
},
|
| 306 |
+
{
|
| 307 |
+
"cell_type": "code",
|
| 308 |
+
"execution_count": null,
|
| 309 |
+
"metadata": {
|
| 310 |
+
"id": "j-xdy5DMwwCn"
|
| 311 |
+
},
|
| 312 |
+
"outputs": [],
|
| 313 |
+
"source": [
|
| 314 |
+
"model.compile(optimizer = 'adam', loss= 'binary_crossentropy', metrics = ['accuracy'])"
|
| 315 |
+
]
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"cell_type": "code",
|
| 319 |
+
"execution_count": null,
|
| 320 |
+
"metadata": {
|
| 321 |
+
"colab": {
|
| 322 |
+
"base_uri": "https://localhost:8080/"
|
| 323 |
+
},
|
| 324 |
+
"id": "kHV41wadxMTf",
|
| 325 |
+
"outputId": "b89c05a9-3f69-4077-ff9a-753bb0d7eeb0"
|
| 326 |
+
},
|
| 327 |
+
"outputs": [
|
| 328 |
+
{
|
| 329 |
+
"name": "stdout",
|
| 330 |
+
"output_type": "stream",
|
| 331 |
+
"text": [
|
| 332 |
+
"Epoch 1/20\n",
|
| 333 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m54s\u001b[0m 73ms/step - accuracy: 0.5726 - loss: 0.7222 - val_accuracy: 0.7048 - val_loss: 0.5793\n",
|
| 334 |
+
"Epoch 2/20\n",
|
| 335 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m66s\u001b[0m 106ms/step - accuracy: 0.7254 - loss: 0.5430 - val_accuracy: 0.7702 - val_loss: 0.4906\n",
|
| 336 |
+
"Epoch 3/20\n",
|
| 337 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m64s\u001b[0m 77ms/step - accuracy: 0.8056 - loss: 0.4145 - val_accuracy: 0.7622 - val_loss: 0.5422\n",
|
| 338 |
+
"Epoch 4/20\n",
|
| 339 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mβββββββοΏ½οΏ½οΏ½ββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m76s\u001b[0m 67ms/step - accuracy: 0.8870 - loss: 0.2681 - val_accuracy: 0.7612 - val_loss: 0.7744\n",
|
| 340 |
+
"Epoch 5/20\n",
|
| 341 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m81s\u001b[0m 66ms/step - accuracy: 0.9457 - loss: 0.1373 - val_accuracy: 0.7468 - val_loss: 0.9700\n",
|
| 342 |
+
"Epoch 6/20\n",
|
| 343 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m86s\u001b[0m 73ms/step - accuracy: 0.9667 - loss: 0.0934 - val_accuracy: 0.7558 - val_loss: 1.2279\n",
|
| 344 |
+
"Epoch 7/20\n",
|
| 345 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 66ms/step - accuracy: 0.9813 - loss: 0.0573 - val_accuracy: 0.7586 - val_loss: 1.3820\n",
|
| 346 |
+
"Epoch 8/20\n",
|
| 347 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m86s\u001b[0m 73ms/step - accuracy: 0.9836 - loss: 0.0475 - val_accuracy: 0.7562 - val_loss: 1.3795\n",
|
| 348 |
+
"Epoch 9/20\n",
|
| 349 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 67ms/step - accuracy: 0.9863 - loss: 0.0418 - val_accuracy: 0.7522 - val_loss: 1.3611\n",
|
| 350 |
+
"Epoch 10/20\n",
|
| 351 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 65ms/step - accuracy: 0.9909 - loss: 0.0282 - val_accuracy: 0.7594 - val_loss: 1.5585\n",
|
| 352 |
+
"Epoch 11/20\n",
|
| 353 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 65ms/step - accuracy: 0.9946 - loss: 0.0210 - val_accuracy: 0.7674 - val_loss: 1.5576\n",
|
| 354 |
+
"Epoch 12/20\n",
|
| 355 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 67ms/step - accuracy: 0.9935 - loss: 0.0191 - val_accuracy: 0.7464 - val_loss: 1.8050\n",
|
| 356 |
+
"Epoch 13/20\n",
|
| 357 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 66ms/step - accuracy: 0.9924 - loss: 0.0314 - val_accuracy: 0.7656 - val_loss: 1.6694\n",
|
| 358 |
+
"Epoch 14/20\n",
|
| 359 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m86s\u001b[0m 73ms/step - accuracy: 0.9935 - loss: 0.0176 - val_accuracy: 0.7572 - val_loss: 2.0530\n",
|
| 360 |
+
"Epoch 15/20\n",
|
| 361 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 66ms/step - accuracy: 0.9917 - loss: 0.0262 - val_accuracy: 0.7676 - val_loss: 1.5757\n",
|
| 362 |
+
"Epoch 16/20\n",
|
| 363 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 74ms/step - accuracy: 0.9946 - loss: 0.0140 - val_accuracy: 0.7572 - val_loss: 1.7711\n",
|
| 364 |
+
"Epoch 17/20\n",
|
| 365 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 73ms/step - accuracy: 0.9926 - loss: 0.0222 - val_accuracy: 0.7648 - val_loss: 1.9376\n",
|
| 366 |
+
"Epoch 18/20\n",
|
| 367 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 73ms/step - accuracy: 0.9961 - loss: 0.0124 - val_accuracy: 0.7518 - val_loss: 2.0122\n",
|
| 368 |
+
"Epoch 19/20\n",
|
| 369 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 73ms/step - accuracy: 0.9952 - loss: 0.0169 - val_accuracy: 0.7546 - val_loss: 1.7739\n",
|
| 370 |
+
"Epoch 20/20\n",
|
| 371 |
+
"\u001b[1m625/625\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 73ms/step - accuracy: 0.9938 - loss: 0.0188 - val_accuracy: 0.7584 - val_loss: 1.9832\n"
|
| 372 |
+
]
|
| 373 |
+
},
|
| 374 |
+
{
|
| 375 |
+
"data": {
|
| 376 |
+
"text/plain": [
|
| 377 |
+
"<keras.src.callbacks.history.History at 0x7d46d4556f50>"
|
| 378 |
+
]
|
| 379 |
+
},
|
| 380 |
+
"execution_count": 11,
|
| 381 |
+
"metadata": {},
|
| 382 |
+
"output_type": "execute_result"
|
| 383 |
+
}
|
| 384 |
+
],
|
| 385 |
+
"source": [
|
| 386 |
+
"history = model.fit(train_ds, epochs = 10, validation_data = validation_ds)\n",
|
| 387 |
+
"history"
|
| 388 |
+
]
|
| 389 |
+
},
|
| 390 |
+
{
|
| 391 |
+
"cell_type": "code",
|
| 392 |
+
"execution_count": null,
|
| 393 |
+
"metadata": {
|
| 394 |
+
"colab": {
|
| 395 |
+
"background_save": true
|
| 396 |
+
},
|
| 397 |
+
"id": "SVku8fIrxZGf",
|
| 398 |
+
"outputId": "3275efa6-576d-4564-8ecd-1f74768aaf54"
|
| 399 |
+
},
|
| 400 |
+
"outputs": [
|
| 401 |
+
{
|
| 402 |
+
"data": {
|
| 403 |
+
"image/png": "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\n",
|
| 404 |
+
"text/plain": [
|
| 405 |
+
"<Figure size 640x480 with 1 Axes>"
|
| 406 |
+
]
|
| 407 |
+
},
|
| 408 |
+
"metadata": {},
|
| 409 |
+
"output_type": "display_data"
|
| 410 |
+
}
|
| 411 |
+
],
|
| 412 |
+
"source": [
|
| 413 |
+
"import matplotlib.pyplot as plt\n",
|
| 414 |
+
"plt.plot(history.history['accuracy'], color = 'red', label = 'train')\n",
|
| 415 |
+
"plt.plot(history.history['val_accuracy'], color = 'blue', label = 'validation')\n",
|
| 416 |
+
"plt.legend()\n",
|
| 417 |
+
"plt.show()"
|
| 418 |
+
]
|
| 419 |
+
},
|
| 420 |
+
{
|
| 421 |
+
"cell_type": "code",
|
| 422 |
+
"execution_count": null,
|
| 423 |
+
"metadata": {
|
| 424 |
+
"id": "GwmcZ0N7ywfe"
|
| 425 |
+
},
|
| 426 |
+
"outputs": [],
|
| 427 |
+
"source": []
|
| 428 |
+
}
|
| 429 |
+
],
|
| 430 |
+
"metadata": {
|
| 431 |
+
"accelerator": "GPU",
|
| 432 |
+
"colab": {
|
| 433 |
+
"gpuType": "T4",
|
| 434 |
+
"provenance": []
|
| 435 |
+
},
|
| 436 |
+
"kernelspec": {
|
| 437 |
+
"display_name": "Python 3",
|
| 438 |
+
"name": "python3"
|
| 439 |
+
},
|
| 440 |
+
"language_info": {
|
| 441 |
+
"name": "python"
|
| 442 |
+
}
|
| 443 |
+
},
|
| 444 |
+
"nbformat": 4,
|
| 445 |
+
"nbformat_minor": 0
|
| 446 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Image-Classification-Project
|
| 2 |
+
This repository contains a deep learning project that classifies images as either cats or dogs using Convolutional Neural Networks (CNNs). The model is trained on a balanced dataset of labeled images and achieves high accuracy in distinguishing between these two categories. The project includes data preprocessing scripts.
|