{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "e7385ae4f3b54fcbb666fc76333f3691": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_e6522a36ebcf42709d07099cab4df460",
              "IPY_MODEL_9933688eb24748e3a8b497ef974be835",
              "IPY_MODEL_b558157844ae48288503ad6f109947e6"
            ],
            "layout": "IPY_MODEL_26c652c145414512a9699090c716d966"
          }
        },
        "e6522a36ebcf42709d07099cab4df460": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_818b9222d34d42cdb8dafae08c7eda16",
            "placeholder": "​",
            "style": "IPY_MODEL_9a8d958a06d74621a55786ef5ed8b051",
            "value": "model.safetensors: 100%"
          }
        },
        "9933688eb24748e3a8b497ef974be835": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_6a088cc8eb1d4c4e88baf3298b201c03",
            "max": 352685652,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_1ff9565c1d1e414bb51db8094e6b6212",
            "value": 352685652
          }
        },
        "b558157844ae48288503ad6f109947e6": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_9836eeb9807a41c9ab179f3c92a25d44",
            "placeholder": "​",
            "style": "IPY_MODEL_9d19df7ef97b4a8e94c52197f8236abd",
            "value": " 353M/353M [00:01&lt;00:00, 260MB/s]"
          }
        },
        "26c652c145414512a9699090c716d966": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "818b9222d34d42cdb8dafae08c7eda16": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "9a8d958a06d74621a55786ef5ed8b051": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "6a088cc8eb1d4c4e88baf3298b201c03": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "1ff9565c1d1e414bb51db8094e6b6212": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "9836eeb9807a41c9ab179f3c92a25d44": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "9d19df7ef97b4a8e94c52197f8236abd": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        }
      }
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZLb5F1DcJmhu",
        "outputId": "d2d3efd3-0dcc-44d3-f146-cfcb786ca513"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Mounted at /content/drive\n"
          ]
        }
      ],
      "source": [
        "\n",
        "# 1. Mount Google Drive\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 2. Install required libraries\n",
        "!pip install timm torch torchvision scikit-learn\n",
        "\n",
        "# 3. Imports\n",
        "import os\n",
        "import torch\n",
        "import torch.nn as nn\n",
        "from torchvision import datasets, transforms\n",
        "from torch.utils.data import DataLoader, random_split # Import random_split\n",
        "import timm\n",
        "from sklearn.metrics import classification_report, confusion_matrix\n",
        "import matplotlib.pyplot as plt"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "kkogHTh7LrVg",
        "outputId": "45c17c93-22c7-4ee0-f8a1-72d5e8847577"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Requirement already satisfied: timm in /usr/local/lib/python3.11/dist-packages (1.0.17)\n",
            "Requirement already satisfied: torch in /usr/local/lib/python3.11/dist-packages (2.6.0+cu124)\n",
            "Requirement already satisfied: torchvision in /usr/local/lib/python3.11/dist-packages (0.21.0+cu124)\n",
            "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (1.6.1)\n",
            "Requirement already satisfied: pyyaml in /usr/local/lib/python3.11/dist-packages (from timm) (6.0.2)\n",
            "Requirement already satisfied: huggingface_hub in /usr/local/lib/python3.11/dist-packages (from timm) (0.33.4)\n",
            "Requirement already satisfied: safetensors in /usr/local/lib/python3.11/dist-packages (from timm) (0.5.3)\n",
            "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch) (3.18.0)\n",
            "Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.11/dist-packages (from torch) (4.14.1)\n",
            "Requirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch) (3.5)\n",
            "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch) (3.1.6)\n",
            "Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from torch) (2025.3.2)\n",
            "Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch)\n",
            "  Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
            "Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch)\n",
            "  Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
            "Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch)\n",
            "  Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
            "Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch)\n",
            "  Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
            "Collecting nvidia-cublas-cu12==12.4.5.8 (from torch)\n",
            "  Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
            "Collecting nvidia-cufft-cu12==11.2.1.3 (from torch)\n",
            "  Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
            "Collecting nvidia-curand-cu12==10.3.5.147 (from torch)\n",
            "  Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
            "Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch)\n",
            "  Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
            "Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch)\n",
            "  Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n",
            "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /usr/local/lib/python3.11/dist-packages (from torch) (0.6.2)\n",
            "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch) (2.21.5)\n",
            "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)\n",
            "Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch)\n",
            "  Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n",
            "Requirement already satisfied: triton==3.2.0 in /usr/local/lib/python3.11/dist-packages (from torch) (3.2.0)\n",
            "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch) (1.13.1)\n",
            "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch) (1.3.0)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from torchvision) (2.0.2)\n",
            "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.11/dist-packages (from torchvision) (11.2.1)\n",
            "Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.15.3)\n",
            "Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.5.1)\n",
            "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (3.6.0)\n",
            "Requirement already satisfied: packaging>=20.9 in /usr/local/lib/python3.11/dist-packages (from huggingface_hub->timm) (25.0)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from huggingface_hub->timm) (2.32.3)\n",
            "Requirement already satisfied: tqdm>=4.42.1 in /usr/local/lib/python3.11/dist-packages (from huggingface_hub->timm) (4.67.1)\n",
            "Requirement already satisfied: hf-xet<2.0.0,>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from huggingface_hub->timm) (1.1.5)\n",
            "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch) (3.0.2)\n",
            "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface_hub->timm) (3.4.2)\n",
            "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface_hub->timm) (3.10)\n",
            "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface_hub->timm) (2.4.0)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface_hub->timm) (2025.7.14)\n",
            "Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m117.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m90.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m54.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m2.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m15.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m7.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m5.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m71.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hInstalling collected packages: nvidia-nvjitlink-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12\n",
            "  Attempting uninstall: nvidia-nvjitlink-cu12\n",
            "    Found existing installation: nvidia-nvjitlink-cu12 12.5.82\n",
            "    Uninstalling nvidia-nvjitlink-cu12-12.5.82:\n",
            "      Successfully uninstalled nvidia-nvjitlink-cu12-12.5.82\n",
            "  Attempting uninstall: nvidia-curand-cu12\n",
            "    Found existing installation: nvidia-curand-cu12 10.3.6.82\n",
            "    Uninstalling nvidia-curand-cu12-10.3.6.82:\n",
            "      Successfully uninstalled nvidia-curand-cu12-10.3.6.82\n",
            "  Attempting uninstall: nvidia-cufft-cu12\n",
            "    Found existing installation: nvidia-cufft-cu12 11.2.3.61\n",
            "    Uninstalling nvidia-cufft-cu12-11.2.3.61:\n",
            "      Successfully uninstalled nvidia-cufft-cu12-11.2.3.61\n",
            "  Attempting uninstall: nvidia-cuda-runtime-cu12\n",
            "    Found existing installation: nvidia-cuda-runtime-cu12 12.5.82\n",
            "    Uninstalling nvidia-cuda-runtime-cu12-12.5.82:\n",
            "      Successfully uninstalled nvidia-cuda-runtime-cu12-12.5.82\n",
            "  Attempting uninstall: nvidia-cuda-nvrtc-cu12\n",
            "    Found existing installation: nvidia-cuda-nvrtc-cu12 12.5.82\n",
            "    Uninstalling nvidia-cuda-nvrtc-cu12-12.5.82:\n",
            "      Successfully uninstalled nvidia-cuda-nvrtc-cu12-12.5.82\n",
            "  Attempting uninstall: nvidia-cuda-cupti-cu12\n",
            "    Found existing installation: nvidia-cuda-cupti-cu12 12.5.82\n",
            "    Uninstalling nvidia-cuda-cupti-cu12-12.5.82:\n",
            "      Successfully uninstalled nvidia-cuda-cupti-cu12-12.5.82\n",
            "  Attempting uninstall: nvidia-cublas-cu12\n",
            "    Found existing installation: nvidia-cublas-cu12 12.5.3.2\n",
            "    Uninstalling nvidia-cublas-cu12-12.5.3.2:\n",
            "      Successfully uninstalled nvidia-cublas-cu12-12.5.3.2\n",
            "  Attempting uninstall: nvidia-cusparse-cu12\n",
            "    Found existing installation: nvidia-cusparse-cu12 12.5.1.3\n",
            "    Uninstalling nvidia-cusparse-cu12-12.5.1.3:\n",
            "      Successfully uninstalled nvidia-cusparse-cu12-12.5.1.3\n",
            "  Attempting uninstall: nvidia-cudnn-cu12\n",
            "    Found existing installation: nvidia-cudnn-cu12 9.3.0.75\n",
            "    Uninstalling nvidia-cudnn-cu12-9.3.0.75:\n",
            "      Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75\n",
            "  Attempting uninstall: nvidia-cusolver-cu12\n",
            "    Found existing installation: nvidia-cusolver-cu12 11.6.3.83\n",
            "    Uninstalling nvidia-cusolver-cu12-11.6.3.83:\n",
            "      Successfully uninstalled nvidia-cusolver-cu12-11.6.3.83\n",
            "Successfully installed nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nvjitlink-cu12-12.4.127\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 4. إعداد مسارات البيانات (غيّر المسار حسب مجلدك)\n",
        "data_dir = '/content/drive/My Drive/AI/DATASET/2nd Dataset'\n",
        "train_dir = os.path.join(data_dir, 'train')\n",
        "val_dir   = os.path.join(data_dir, 'val')\n",
        "test_dir  = os.path.join(data_dir, 'test')"
      ],
      "metadata": {
        "id": "Al3IWdm8NrDO"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 5. تعريف التحويلات (augmentations)\n",
        "train_transforms = transforms.Compose([\n",
        "    transforms.RandomResizedCrop(224),\n",
        "    transforms.RandomHorizontalFlip(),\n",
        "    transforms.ToTensor(),\n",
        "    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n",
        "])\n",
        "val_transforms = transforms.Compose([\n",
        "    transforms.Resize(256),\n",
        "    transforms.CenterCrop(224),\n",
        "    transforms.ToTensor(),\n",
        "    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n",
        "])\n",
        "\n",
        "test_transforms = val_transforms  # نفس تحويلات التحقق للاختبار"
      ],
      "metadata": {
        "id": "-5uFK3zKNzv7"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 6. تحميل البيانات مع التحقق من وجود المجلدات\n",
        "if os.path.isdir(train_dir) and os.path.isdir(val_dir) and os.path.isdir(test_dir):\n",
        "    train_dataset = datasets.ImageFolder(train_dir, transform=train_transforms)\n",
        "    val_dataset   = datasets.ImageFolder(val_dir,   transform=val_transforms)\n",
        "    test_dataset  = datasets.ImageFolder(test_dir,  transform=test_transforms)\n",
        "    class_names = train_dataset.classes\n",
        "elif os.path.isdir(data_dir):\n",
        "    full_dataset = datasets.ImageFolder(data_dir, transform=train_transforms)\n",
        "    total_len = len(full_dataset)\n",
        "    train_len = int(0.7 * total_len)\n",
        "    val_len   = int(0.2 * total_len)\n",
        "    test_len  = total_len - train_len - val_len\n",
        "    train_dataset, val_dataset, test_dataset = random_split(full_dataset, [train_len, val_len, test_len])\n",
        "    # ضبط التحويلات لمجموعات التحقق والاختبار\n",
        "    val_dataset.dataset.transform = val_transforms\n",
        "    test_dataset.dataset.transform = test_transforms\n",
        "    class_names = full_dataset.classes\n",
        "else:\n",
        "    raise FileNotFoundError(f\"المجلد {data_dir} غير موجود أو لا يحتوي على فئات صالحة.\")\n",
        "\n",
        "batch_size = 32\n",
        "train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4)\n",
        "val_loader   = DataLoader(val_dataset,   batch_size=batch_size, shuffle=False, num_workers=4)\n",
        "test_loader  = DataLoader(test_dataset,  batch_size=batch_size, shuffle=False, num_workers=4)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "RnlUODdVN07w",
        "outputId": "a111da34-ec04-4f61-9bcd-5dce1022ecd2"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n",
            "  warnings.warn(\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 7. تهيئة نموذج Swin Transformer\n",
        "num_classes = len(class_names)\n",
        "model = timm.create_model('swin_base_patch4_window7_224', pretrained=True, num_classes=num_classes)\n",
        "\n",
        "# 8. جهاز التنفيذ\n",
        "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
        "model.to(device)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000,
          "referenced_widgets": [
            "e7385ae4f3b54fcbb666fc76333f3691",
            "e6522a36ebcf42709d07099cab4df460",
            "9933688eb24748e3a8b497ef974be835",
            "b558157844ae48288503ad6f109947e6",
            "26c652c145414512a9699090c716d966",
            "818b9222d34d42cdb8dafae08c7eda16",
            "9a8d958a06d74621a55786ef5ed8b051",
            "6a088cc8eb1d4c4e88baf3298b201c03",
            "1ff9565c1d1e414bb51db8094e6b6212",
            "9836eeb9807a41c9ab179f3c92a25d44",
            "9d19df7ef97b4a8e94c52197f8236abd"
          ]
        },
        "id": "_6MZU_bQPCEe",
        "outputId": "d37f44dd-a421-4bed-b267-4e74f0edfbda"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n",
            "The secret `HF_TOKEN` does not exist in your Colab secrets.\n",
            "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n",
            "You will be able to reuse this secret in all of your notebooks.\n",
            "Please note that authentication is recommended but still optional to access public models or datasets.\n",
            "  warnings.warn(\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "model.safetensors:   0%|          | 0.00/353M [00:00<?, ?B/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "e7385ae4f3b54fcbb666fc76333f3691"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "SwinTransformer(\n",
              "  (patch_embed): PatchEmbed(\n",
              "    (proj): Conv2d(3, 128, kernel_size=(4, 4), stride=(4, 4))\n",
              "    (norm): LayerNorm((128,), eps=1e-05, elementwise_affine=True)\n",
              "  )\n",
              "  (layers): Sequential(\n",
              "    (0): SwinTransformerStage(\n",
              "      (downsample): Identity()\n",
              "      (blocks): Sequential(\n",
              "        (0): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((128,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=128, out_features=384, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=128, out_features=128, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): Identity()\n",
              "          (norm2): LayerNorm((128,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=128, out_features=512, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=512, out_features=128, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): Identity()\n",
              "        )\n",
              "        (1): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((128,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=128, out_features=384, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=128, out_features=128, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.004)\n",
              "          (norm2): LayerNorm((128,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=128, out_features=512, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=512, out_features=128, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.004)\n",
              "        )\n",
              "      )\n",
              "    )\n",
              "    (1): SwinTransformerStage(\n",
              "      (downsample): PatchMerging(\n",
              "        (norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "        (reduction): Linear(in_features=512, out_features=256, bias=False)\n",
              "      )\n",
              "      (blocks): Sequential(\n",
              "        (0): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=256, out_features=768, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=256, out_features=256, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.009)\n",
              "          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=256, out_features=1024, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=1024, out_features=256, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.009)\n",
              "        )\n",
              "        (1): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=256, out_features=768, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=256, out_features=256, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.013)\n",
              "          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=256, out_features=1024, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=1024, out_features=256, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.013)\n",
              "        )\n",
              "      )\n",
              "    )\n",
              "    (2): SwinTransformerStage(\n",
              "      (downsample): PatchMerging(\n",
              "        (norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "        (reduction): Linear(in_features=1024, out_features=512, bias=False)\n",
              "      )\n",
              "      (blocks): Sequential(\n",
              "        (0): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.017)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.017)\n",
              "        )\n",
              "        (1): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.022)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.022)\n",
              "        )\n",
              "        (2): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.026)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.026)\n",
              "        )\n",
              "        (3): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.030)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.030)\n",
              "        )\n",
              "        (4): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.035)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.035)\n",
              "        )\n",
              "        (5): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.039)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.039)\n",
              "        )\n",
              "        (6): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.043)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.043)\n",
              "        )\n",
              "        (7): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.048)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.048)\n",
              "        )\n",
              "        (8): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.052)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.052)\n",
              "        )\n",
              "        (9): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.057)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.057)\n",
              "        )\n",
              "        (10): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.061)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.061)\n",
              "        )\n",
              "        (11): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.065)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.065)\n",
              "        )\n",
              "        (12): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.070)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.070)\n",
              "        )\n",
              "        (13): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.074)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.074)\n",
              "        )\n",
              "        (14): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.078)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.078)\n",
              "        )\n",
              "        (15): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.083)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.083)\n",
              "        )\n",
              "        (16): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.087)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.087)\n",
              "        )\n",
              "        (17): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=512, out_features=1536, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=512, out_features=512, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.091)\n",
              "          (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=512, out_features=2048, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=2048, out_features=512, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.091)\n",
              "        )\n",
              "      )\n",
              "    )\n",
              "    (3): SwinTransformerStage(\n",
              "      (downsample): PatchMerging(\n",
              "        (norm): LayerNorm((2048,), eps=1e-05, elementwise_affine=True)\n",
              "        (reduction): Linear(in_features=2048, out_features=1024, bias=False)\n",
              "      )\n",
              "      (blocks): Sequential(\n",
              "        (0): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=1024, out_features=3072, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.096)\n",
              "          (norm2): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.096)\n",
              "        )\n",
              "        (1): SwinTransformerBlock(\n",
              "          (norm1): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          (attn): WindowAttention(\n",
              "            (qkv): Linear(in_features=1024, out_features=3072, bias=True)\n",
              "            (attn_drop): Dropout(p=0.0, inplace=False)\n",
              "            (proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            (proj_drop): Dropout(p=0.0, inplace=False)\n",
              "            (softmax): Softmax(dim=-1)\n",
              "          )\n",
              "          (drop_path1): DropPath(drop_prob=0.100)\n",
              "          (norm2): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          (mlp): Mlp(\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (act): GELU(approximate='none')\n",
              "            (drop1): Dropout(p=0.0, inplace=False)\n",
              "            (norm): Identity()\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (drop2): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (drop_path2): DropPath(drop_prob=0.100)\n",
              "        )\n",
              "      )\n",
              "    )\n",
              "  )\n",
              "  (norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "  (head): ClassifierHead(\n",
              "    (global_pool): SelectAdaptivePool2d(pool_type=avg, flatten=Identity())\n",
              "    (drop): Dropout(p=0.0, inplace=False)\n",
              "    (fc): Linear(in_features=1024, out_features=5, bias=True)\n",
              "    (flatten): Identity()\n",
              "  )\n",
              ")"
            ]
          },
          "metadata": {},
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 9. تعريف Loss و Optimizer\n",
        "criterion = nn.CrossEntropyLoss()\n",
        "optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4, weight_decay=1e-5)\n",
        "scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)\n",
        "\n",
        "# 10. حلقة التدريب والتقييم\n",
        "epochs = 50\n",
        "best_val_acc = 0.0\n",
        "for epoch in range(epochs):\n",
        "    model.train()\n",
        "    running_loss = 0.0\n",
        "    for images, labels in train_loader:\n",
        "        images, labels = images.to(device), labels.to(device)\n",
        "        optimizer.zero_grad()\n",
        "        outputs = model(images)\n",
        "        loss = criterion(outputs, labels)\n",
        "        loss.backward()\n",
        "        optimizer.step()\n",
        "        running_loss += loss.item() * images.size(0)\n",
        "    epoch_loss = running_loss / len(train_loader.dataset)\n",
        "    print(f'Epoch {epoch+1}/{epochs} - Training Loss: {epoch_loss:.4f}')\n",
        "\n",
        "    model.eval()\n",
        "    correct, total = 0, 0\n",
        "    with torch.no_grad():\n",
        "        for images, labels in val_loader:\n",
        "            images, labels = images.to(device), labels.to(device)\n",
        "            outputs = model(images)\n",
        "            _, preds = torch.max(outputs, dim=1)\n",
        "            correct += (preds == labels).sum().item()\n",
        "            total += labels.size(0)\n",
        "    val_acc = correct / total\n",
        "    print(f'Epoch {epoch+1}/{epochs} - Validation Accuracy: {val_acc:.4f}\\n')\n",
        "\n",
        "    if val_acc > best_val_acc:\n",
        "        best_val_acc = val_acc\n",
        "        torch.save(model.state_dict(), os.path.join(data_dir, 'best_swin_model.pth'))\n",
        "\n",
        "# 11. أفضل دقّة تحقق\n",
        "print(f\"Best Validation Accuracy: {best_val_acc:.4f}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "-8TYsaufPJ7o",
        "outputId": "22a37962-931d-4f82-c29b-14f2ad3e5ec8"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/50 - Training Loss: 0.8123\n",
            "Epoch 1/50 - Validation Accuracy: 0.7400\n",
            "\n",
            "Epoch 2/50 - Training Loss: 0.4213\n",
            "Epoch 2/50 - Validation Accuracy: 0.7833\n",
            "\n",
            "Epoch 3/50 - Training Loss: 0.3373\n",
            "Epoch 3/50 - Validation Accuracy: 0.7500\n",
            "\n",
            "Epoch 4/50 - Training Loss: 0.2928\n",
            "Epoch 4/50 - Validation Accuracy: 0.7000\n",
            "\n",
            "Epoch 5/50 - Training Loss: 0.2319\n",
            "Epoch 5/50 - Validation Accuracy: 0.7000\n",
            "\n",
            "Epoch 6/50 - Training Loss: 0.0853\n",
            "Epoch 6/50 - Validation Accuracy: 0.7533\n",
            "\n",
            "Epoch 7/50 - Training Loss: 0.1869\n",
            "Epoch 7/50 - Validation Accuracy: 0.7700\n",
            "\n",
            "Epoch 8/50 - Training Loss: 0.1383\n",
            "Epoch 8/50 - Validation Accuracy: 0.7433\n",
            "\n",
            "Epoch 9/50 - Training Loss: 0.0610\n",
            "Epoch 9/50 - Validation Accuracy: 0.7900\n",
            "\n",
            "Epoch 10/50 - Training Loss: 0.0810\n",
            "Epoch 10/50 - Validation Accuracy: 0.7500\n",
            "\n",
            "Epoch 11/50 - Training Loss: 0.1120\n",
            "Epoch 11/50 - Validation Accuracy: 0.7467\n",
            "\n",
            "Epoch 12/50 - Training Loss: 0.1042\n",
            "Epoch 12/50 - Validation Accuracy: 0.7300\n",
            "\n",
            "Epoch 13/50 - Training Loss: 0.1205\n",
            "Epoch 13/50 - Validation Accuracy: 0.7667\n",
            "\n",
            "Epoch 14/50 - Training Loss: 0.0820\n",
            "Epoch 14/50 - Validation Accuracy: 0.7733\n",
            "\n",
            "Epoch 15/50 - Training Loss: 0.0615\n",
            "Epoch 15/50 - Validation Accuracy: 0.7533\n",
            "\n",
            "Epoch 16/50 - Training Loss: 0.0524\n",
            "Epoch 16/50 - Validation Accuracy: 0.7533\n",
            "\n",
            "Epoch 17/50 - Training Loss: 0.0729\n",
            "Epoch 17/50 - Validation Accuracy: 0.7533\n",
            "\n",
            "Epoch 18/50 - Training Loss: 0.0708\n",
            "Epoch 18/50 - Validation Accuracy: 0.7733\n",
            "\n",
            "Epoch 19/50 - Training Loss: 0.0605\n",
            "Epoch 19/50 - Validation Accuracy: 0.7467\n",
            "\n",
            "Epoch 20/50 - Training Loss: 0.0569\n",
            "Epoch 20/50 - Validation Accuracy: 0.6367\n",
            "\n",
            "Epoch 21/50 - Training Loss: 0.1375\n",
            "Epoch 21/50 - Validation Accuracy: 0.7633\n",
            "\n",
            "Epoch 22/50 - Training Loss: 0.0516\n",
            "Epoch 22/50 - Validation Accuracy: 0.7433\n",
            "\n",
            "Epoch 23/50 - Training Loss: 0.0479\n",
            "Epoch 23/50 - Validation Accuracy: 0.7567\n",
            "\n",
            "Epoch 24/50 - Training Loss: 0.1610\n",
            "Epoch 24/50 - Validation Accuracy: 0.6967\n",
            "\n",
            "Epoch 25/50 - Training Loss: 0.1132\n",
            "Epoch 25/50 - Validation Accuracy: 0.7000\n",
            "\n",
            "Epoch 26/50 - Training Loss: 0.0843\n",
            "Epoch 26/50 - Validation Accuracy: 0.7233\n",
            "\n",
            "Epoch 27/50 - Training Loss: 0.0475\n",
            "Epoch 27/50 - Validation Accuracy: 0.7167\n",
            "\n",
            "Epoch 28/50 - Training Loss: 0.0284\n",
            "Epoch 28/50 - Validation Accuracy: 0.7433\n",
            "\n",
            "Epoch 29/50 - Training Loss: 0.0432\n",
            "Epoch 29/50 - Validation Accuracy: 0.7433\n",
            "\n",
            "Epoch 30/50 - Training Loss: 0.0382\n",
            "Epoch 30/50 - Validation Accuracy: 0.7700\n",
            "\n",
            "Epoch 31/50 - Training Loss: 0.0135\n",
            "Epoch 31/50 - Validation Accuracy: 0.7833\n",
            "\n",
            "Epoch 32/50 - Training Loss: 0.0004\n",
            "Epoch 32/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 33/50 - Training Loss: 0.0002\n",
            "Epoch 33/50 - Validation Accuracy: 0.7900\n",
            "\n",
            "Epoch 34/50 - Training Loss: 0.0003\n",
            "Epoch 34/50 - Validation Accuracy: 0.7933\n",
            "\n",
            "Epoch 35/50 - Training Loss: 0.0001\n",
            "Epoch 35/50 - Validation Accuracy: 0.7967\n",
            "\n",
            "Epoch 36/50 - Training Loss: 0.0001\n",
            "Epoch 36/50 - Validation Accuracy: 0.7967\n",
            "\n",
            "Epoch 37/50 - Training Loss: 0.0001\n",
            "Epoch 37/50 - Validation Accuracy: 0.7967\n",
            "\n",
            "Epoch 38/50 - Training Loss: 0.0002\n",
            "Epoch 38/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 39/50 - Training Loss: 0.0001\n",
            "Epoch 39/50 - Validation Accuracy: 0.7833\n",
            "\n",
            "Epoch 40/50 - Training Loss: 0.0000\n",
            "Epoch 40/50 - Validation Accuracy: 0.7833\n",
            "\n",
            "Epoch 41/50 - Training Loss: 0.0001\n",
            "Epoch 41/50 - Validation Accuracy: 0.7833\n",
            "\n",
            "Epoch 42/50 - Training Loss: 0.0001\n",
            "Epoch 42/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 43/50 - Training Loss: 0.0001\n",
            "Epoch 43/50 - Validation Accuracy: 0.7833\n",
            "\n",
            "Epoch 44/50 - Training Loss: 0.0001\n",
            "Epoch 44/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 45/50 - Training Loss: 0.0001\n",
            "Epoch 45/50 - Validation Accuracy: 0.7900\n",
            "\n",
            "Epoch 46/50 - Training Loss: 0.0000\n",
            "Epoch 46/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 47/50 - Training Loss: 0.0000\n",
            "Epoch 47/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 48/50 - Training Loss: 0.0000\n",
            "Epoch 48/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 49/50 - Training Loss: 0.0000\n",
            "Epoch 49/50 - Validation Accuracy: 0.7867\n",
            "\n",
            "Epoch 50/50 - Training Loss: 0.0000\n",
            "Epoch 50/50 - Validation Accuracy: 0.7833\n",
            "\n",
            "Best Validation Accuracy: 0.7967\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 12. تقييم الأداء على مجموعة الاختبار\n",
        "model.eval()\n",
        "correct, total = 0, 0\n",
        "all_preds, all_labels = [], []\n",
        "with torch.no_grad():\n",
        "    for images, labels in test_loader:\n",
        "        images, labels = images.to(device), labels.to(device)\n",
        "        outputs = model(images)\n",
        "        _, preds = torch.max(outputs, dim=1)\n",
        "        correct += (preds == labels).sum().item()\n",
        "        total += labels.size(0)\n",
        "        all_preds.extend(preds.cpu().numpy())\n",
        "        all_labels.extend(labels.cpu().numpy())\n",
        "\n",
        "test_acc = correct / total\n",
        "print(f'Test Accuracy: {test_acc:.4f}')\n",
        "\n",
        "# 13. تقرير التصنيف لمجموعة الاختبار\n",
        "report = classification_report(all_labels, all_preds, target_names=class_names)\n",
        "cm = confusion_matrix(all_labels, all_preds)\n",
        "print(\"\\nTest Classification Report:\")\n",
        "print(report)\n",
        "print(\"Test Confusion Matrix:\")\n",
        "print(cm)\n",
        "\n",
        "# 14. حفظ تقرير التصنيف\n",
        "with open(os.path.join(data_dir, 'classification_report_test.txt'), 'w') as f:\n",
        "    f.write(report)\n",
        "\n",
        "# 15. رسم مصفوفة الالتباس\n",
        "plt.figure()\n",
        "plt.imshow(cm, interpolation='nearest')\n",
        "plt.title('Test Confusion Matrix')\n",
        "plt.xlabel('Predicted Label')\n",
        "plt.ylabel('True Label')\n",
        "plt.xticks(range(num_classes), class_names, rotation=45)\n",
        "plt.yticks(range(num_classes), class_names)\n",
        "plt.colorbar()\n",
        "plt.tight_layout()\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 851
        },
        "id": "uQ1vkppIPPlg",
        "outputId": "79b757e1-e316-428a-d69c-b1ee8774e2e2"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Test Accuracy: 0.7467\n",
            "\n",
            "Test Classification Report:\n",
            "                                        precision    recall  f1-score   support\n",
            "\n",
            "05078_Animalia_Plestiodon_inexpectatus       0.59      0.76      0.67        25\n",
            "    05079_Animalia_Plestiodon_laticeps       0.75      0.58      0.65        31\n",
            "  05087_Animalia_Gonatodes_albogularis       0.97      0.97      0.97        30\n",
            " 05107_Animalia_Agkistrodon_contortrix       0.64      0.82      0.72        28\n",
            "05108_Animalia_Agkistrodon_laticinctus       0.82      0.64      0.72        36\n",
            "\n",
            "                              accuracy                           0.75       150\n",
            "                             macro avg       0.75      0.75      0.75       150\n",
            "                          weighted avg       0.76      0.75      0.75       150\n",
            "\n",
            "Test Confusion Matrix:\n",
            "[[19  6  0  0  0]\n",
            " [12 18  0  1  0]\n",
            " [ 0  0 29  0  1]\n",
            " [ 1  0  0 23  4]\n",
            " [ 0  0  1 12 23]]\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl8AAAHWCAYAAABJ6OyQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XdYFMf/wPH3AdKkqIAgEbsiWNDYYoklElHUxN5771HAllhAEzUGDZoYW1DUYO+xl1hiRxTRqEQNBhN7w4BKu/39wZf9ccLhgSiafF7Ps4+wOzszO3d4n5uZndUoiqIghBBCCCHeCKO8roAQQgghxH+JBF9CCCGEEG+QBF9CCCGEEG+QBF9CCCGEEG+QBF9CCCGEEG+QBF9CCCGEEG+QBF9CCCGEEG+QBF9CCCGEEG+QBF9CCCGEEG+QBF9CCCFeyZ07d2jXrh12dnZoNBqCgoJyvQyNRoO/v3+u5/uu6tWrFyVKlMjraogckuBLCCFeQqPRGLQdPHjwlct6+vQp/v7+2c7rzp07+Pn5Ub58eSwtLcmfPz/VqlXjyy+/5PHjx69cr6yMGjWK3bt3M378eFasWEHTpk1fa3lvkr+/PxqNBiMjI27cuJHh+JMnT7CwsECj0TBs2LBs55/T11u820zyugJCCPG2W7Fihc7vy5cvZ+/evRn2u7m5vXJZT58+JSAgAICGDRsadE5YWBje3t7ExcXRrVs3qlWrBsDp06eZMWMGhw8fZs+ePa9cN31++eUXPv30U/z8/F5bGc+ePcPEJO8+sszMzFi1ahVjxozR2b9x48ZXyjcnrzfA4sWL0Wq1r1S2yDsSfAkhxEt069ZN5/cTJ06wd+/eDPvzwuPHj2ndujXGxsacPXuW8uXL6xz/6quvWLx48Wutw927dylQoMBrLcPc3Py15v8y3t7emQZfK1eupHnz5mzYsOGN1CM+Pp78+fOTL1++N1KeeD1k2FEIIXKBVqslKCiIChUqYG5ujqOjIwMHDuTRo0c66U6fPo2Xlxf29vZYWFhQsmRJ+vTpA8D169dxcHAAICAgQB3OzGqu08KFC/n777+ZPXt2hsALwNHRkQkTJujs++GHH6hQoQJmZmY4OzszdOjQDEOTDRs2pGLFily8eJFGjRphaWnJe++9x8yZM9U0ISEhaDQaFEVh3rx5an3h/4frXpR2zvXr1w1qkzSZtcPZs2dp1qwZNjY2WFlZ0bhxY06cOJFpeUePHsXHxwcHBwfy589P69atuXfvnt52fVGXLl2IiIjg8uXL6r7bt2/zyy+/0KVLlwzpExMTmTRpEtWqVcPW1pb8+fPz4YcfcuDAATXNy17vXr16YWVlxbVr1/D29sba2pquXbuqx9LP+Zo8eTJGRkbs379fpx4DBgzA1NSUc+fOGXyt4vWTni8hhMgFAwcOJCQkhN69ezNixAiio6P5/vvvOXv2LEePHiVfvnzcvXuXJk2a4ODgwLhx4yhQoADXr19Xh64cHByYP38+gwcPpnXr1rRp0waAypUr6y1369atWFhY0K5dO4Pq6e/vT0BAAJ6engwePJioqCjmz59PWFiYWs80jx49omnTprRp04YOHTqwfv16xo4dS6VKlWjWrBn169dnxYoVdO/enY8//pgePXpku91e1ib6/Pbbb3z44YfY2NgwZswY8uXLx8KFC2nYsCGHDh2iVq1aOumHDx9OwYIFmTx5MtevXycoKIhhw4axZs0ag+pZv359ihYtysqVK5kyZQoAa9aswcrKiubNm2dI/+TJE3788Uc6d+5M//79+eeffwgODsbLy4tTp05RpUoVg17v5ORkvLy8qFevHoGBgVhaWmZavwkTJvDzzz/Tt29fzp8/j7W1Nbt372bx4sVMnToVDw8Pg65TvCGKEEKIbBk6dKiS/r/PX3/9VQGU0NBQnXS7du3S2b9p0yYFUMLCwvTmfe/ePQVQJk+ebFBdChYsqHh4eBiU9u7du4qpqanSpEkTJSUlRd3//fffK4CyZMkSdV+DBg0UQFm+fLm6LyEhQXFyclLatm2rky+gDB06VGff5MmTlcw+YpYuXaoASnR0tKIohrVJWhnp26RVq1aKqampcu3aNXXfzZs3FWtra6V+/foZyvP09FS0Wq26f9SoUYqxsbHy+PHjLMtNu4579+4pfn5+SpkyZdRjNWrUUHr37p1pGyQnJysJCQk6eT169EhxdHRU+vTpo+7L6vXu2bOnAijjxo3L9Fjx4sV19p0/f14xNTVV+vXrpzx69Eh57733lOrVqytJSUlZXqN482TYUQghXtG6deuwtbXl448/5v79++pWrVo1rKys1KGmtHlR27ZtIykpKVfKfvLkCdbW1gal3bdvH4mJiYwcORIjo///779///7Y2Niwfft2nfRW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PwoXLsyzZ8+4e/fuG6tP+h64W7duqcGOlZUVERERwP8HQHnxIB5FUYiPj+fXX39lzJgx1KhRg6tXr7Ju3TqaNm1Kp06dXqnHUHq+hBBCvNNe7CGxsLAgKSmJxYsX4+LiwqJFi8iXLx9Vq1Zl586djB8/nr17975SeYmJidy/f5/79++zfv16NmzYwF9//UV8fDynTp3i3r17TJ06VSfoyQteXl60bNlS51mJt2/fpmHDhlSqVInff/+d3bt389133+Ho6Ei9evWYPn36a6vPiBEjmDNnjtouixYtYsyYMVSsWJECBQpQoEABoqOjOXLkCNWqVcPExIR8+fK9tvqklz4g1Gg05M+fHzMzM1avXo2joyMhISFoNBpKly7NwYMH6d+/P3v27MlRWdLzJYQQ4p2WFniFhoayaNEiACZMmICrqyu+vr54enoybdo0goKCmDp1KgBxcXEG5//iHCSNRkPhwoXp0KEDCxYsoHfv3pQsWZKpU6dy5swZypUrx6NHj/I88Prnn3/o0aMHAwYM0NkfHx/Pnj178PX1pU2bNhw+fJguXbpQs2ZNduzYwY0bN15LfX777Td+//13nRsTXF1d2bhxI127dsXR0ZEnT56wfft2evXqReXKlalRowZt27Zl165dr6VO6aW9XqtWrWL9+vUA9O3bl/fee4/PPvuMBg0aMG3aNBYuXMjo0aMxMzMjISEhR2XJg7WFEEK88x4+fEinTp14+vQpw4cPp2PHjgDcuXMHR0dHILXHysvLC0dHR1asWGFQvul71VauXMm9e/d4+vQpAwYMwM7Ojj/++IOUlBTKli2rntOkSROqVq3K119/nctXmXOzZ88mOjqa7777DoDhw4cTExND06ZNady4MeXKlePUqVMMGjSIjRs3UqJEiddan2XLltGzZ88M+9evX4+Pjw979+7l0qVLnDt3jocPHzJr1ixMTF7/YN3jx4+pV68eDg4OfPHFF3h6egJw8+ZNnJ2d1XSenp64uLiwdOnSnBWkCCGEEO8YrVabYd/FixeVDh06KPXr11dCQkLU/bGxscqWLVuUJk2aKJUrV1YSExP15qGvjFGjRikFChRQatSoobi4uCjOzs7KmjVrlPj4eEVRFOXx48fKiRMnlObNmysVK1ZUkpKScuMycyw5OVn9+dq1a8rXX3+tWFtbK+PGjVP3//PPP+rPz58/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\n"
          },
          "metadata": {}
        }
      ]
    }
  ]
}