{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9KsncGm-p90B", "outputId": "adf91a72-da16-45d1-d7c0-81d03f8c05ca" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cp: cannot stat 'kaggle.json': No such file or directory\n" ] } ], "source": [ "!mkdir -p ~/.kaggle\n", "!cp kaggle.json ~/.kaggle/" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "epMkM_TppxYe", "outputId": "5d8294fe-628f-4b35-fa21-ddffabc275d3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset URL: https://www.kaggle.com/datasets/salader/dogs-vs-cats\n", "License(s): unknown\n", "Downloading dogs-vs-cats.zip to /content\n", "100% 1.06G/1.06G [00:07<00:00, 102MB/s] \n", "100% 1.06G/1.06G [00:07<00:00, 147MB/s]\n" ] } ], "source": [ "#kallge ka api command hai ..isse ka use kerke kaggle ka data directly fetch ker sakte hai\n", "!kaggle datasets download -d salader/dogs-vs-cats" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "QvlIgcpto4Yq" }, "outputs": [], "source": [ "#ab humare pass jo data aaaya hai ushko unzip kerna padega\n", "import zipfile\n", "zip_ref = zipfile.ZipFile('/content/dogs-vs-cats.zip', \"r\")\n", "zip_ref.extractall('/content')\n", "zip_ref.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Rk5hM0ffrMcY" }, "outputs": [], "source": [ "import tensorflow as tf\n", "from tensorflow import keras\n", "from keras import Sequential\n", "from keras.layers import Dense,Conv2D, MaxPooling2D ,Flatten" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "UzXicNVEro9K", "outputId": "07a616bd-0efe-4614-9feb-ab0d7499a89a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 20000 files belonging to 2 classes.\n", "Found 5000 files belonging to 2 classes.\n" ] } ], "source": [ "import tensorflow as tf\n", "from tensorflow import keras\n", "\n", "train_ds = keras.utils.image_dataset_from_directory(\n", " directory='/content/train',\n", " labels='inferred', # Fixed spelling\n", " label_mode='int',\n", " batch_size=32,\n", " image_size=(256, 256)\n", ")\n", "\n", "validation_ds = keras.utils.image_dataset_from_directory(\n", " directory='/content/test',\n", " labels='inferred', # Fixed spelling\n", " label_mode='int',\n", " batch_size=32,\n", " image_size=(256, 256)\n", ")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "qp8_aex6tz41" }, "outputs": [], "source": [ "#normalize\n", "def process(image, label):\n", " image = tf.cast(image/255. , tf.float32)\n", " return image, label\n", "\n", "train_ds= train_ds.map(process)\n", "validation_ds = validation_ds.map(process)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kDJ2DOJXu_TC", "outputId": "599d1759-18cb-42ce-cf5c-b34cc5947b2e" }, "outputs": [ { "name": "stderr", "output_type": "stream", "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": [ "#create cnn model\n", "model = Sequential()\n", "model.add(Conv2D(32, kernel_size =(3,3), activation = 'relu', padding = \"valid\", input_shape = (256,256,3) ))\n", "model.add(MaxPooling2D(pool_size = (2,2),strides = 2, padding = 'valid' ))\n", "\n", "model.add(Conv2D(64, kernel_size =(3,3), activation = 'relu', padding = \"valid\" ))\n", "model.add(MaxPooling2D(pool_size = (2,2),strides = 2, padding = 'valid' ))\n", "\n", "model.add(Conv2D(128, kernel_size =(3,3), activation = 'relu', padding = \"valid\"))\n", "model.add(MaxPooling2D(pool_size = (2,2),strides = 2, padding = 'valid' ))\n", "\n", "model.add(Flatten())\n", "model.add(Dense(128,activation = 'relu'))\n", "model.add(Dense(64, activation = 'relu'))\n", "model.add(Dense(1, activation = 'sigmoid'))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 476 }, "id": "DwLn_WKvvUL9", "outputId": "399fd888-3031-4f08-effa-d407527d3fa0" }, "outputs": [ { "data": { "text/html": [ "
Model: \"sequential\"\n",
"\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
"┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
"│ conv2d (Conv2D) │ (None, 254, 254, 32) │ 896 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ max_pooling2d (MaxPooling2D) │ (None, 127, 127, 32) │ 0 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ conv2d_1 (Conv2D) │ (None, 125, 125, 64) │ 18,496 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ max_pooling2d_1 (MaxPooling2D) │ (None, 62, 62, 64) │ 0 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ conv2d_2 (Conv2D) │ (None, 60, 60, 128) │ 73,856 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ max_pooling2d_2 (MaxPooling2D) │ (None, 30, 30, 128) │ 0 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ flatten (Flatten) │ (None, 115200) │ 0 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ dense (Dense) │ (None, 128) │ 14,745,728 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ dense_1 (Dense) │ (None, 64) │ 8,256 │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ dense_2 (Dense) │ (None, 1) │ 65 │\n",
"└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n",
"\n"
],
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
"┃\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",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ 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",
"└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Total params: 14,847,297 (56.64 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m14,847,297\u001b[0m (56.64 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 14,847,297 (56.64 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m14,847,297\u001b[0m (56.64 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Non-trainable params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "j-xdy5DMwwCn" }, "outputs": [], "source": [ "model.compile(optimizer = 'adam', loss= 'binary_crossentropy', metrics = ['accuracy'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kHV41wadxMTf", "outputId": "b89c05a9-3f69-4077-ff9a-753bb0d7eeb0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "\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", "Epoch 2/20\n", "\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", "Epoch 3/20\n", "\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", "Epoch 4/20\n", "\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", "Epoch 5/20\n", "\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", "Epoch 6/20\n", "\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", "Epoch 7/20\n", "\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", "Epoch 8/20\n", "\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", "Epoch 9/20\n", "\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", "Epoch 10/20\n", "\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", "Epoch 11/20\n", "\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", "Epoch 12/20\n", "\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", "Epoch 13/20\n", "\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", "Epoch 14/20\n", "\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", "Epoch 15/20\n", "\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", "Epoch 16/20\n", "\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", "Epoch 17/20\n", "\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", "Epoch 18/20\n", "\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", "Epoch 19/20\n", "\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", "Epoch 20/20\n", "\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" ] }, { "data": { "text/plain": [ "