{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":45867,"databundleVersionId":6924515,"sourceType":"competition"}],"dockerImageVersionId":30626,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nos.environ[\"KERAS_BACKEND\"] = \"tensorflow\"\n\nimport pickle\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom datetime import datetime\n    \nimport tensorflow as tf\nfrom tensorflow.keras.callbacks import EarlyStopping, TensorBoard\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Flatten, Dense, Dropout, Input, GlobalAveragePooling2D, BatchNormalization\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.applications import ResNet152V2\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.870236Z","iopub.execute_input":"2023-12-18T13:21:39.87074Z","iopub.status.idle":"2023-12-18T13:21:39.878166Z","shell.execute_reply.started":"2023-12-18T13:21:39.870689Z","shell.execute_reply":"2023-12-18T13:21:39.876916Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Charger les données d'entraînement\ntrain_df = pd.read_csv(\"/kaggle/input/UBC-OCEAN/train.csv\")\n\"/kaggle/input/UBC-OCEAN/test_images\"\n# Filtrer les lignes où is_tma est False\ntrain_df = train_df[train_df[\"is_tma\"] == False]\n# Afficher les premières lignes du DataFrame filtré\ntrain_df","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.879903Z","iopub.execute_input":"2023-12-18T13:21:39.880226Z","iopub.status.idle":"2023-12-18T13:21:39.903773Z","shell.execute_reply.started":"2023-12-18T13:21:39.880196Z","shell.execute_reply":"2023-12-18T13:21:39.902721Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"Nombre d'images chargées sur train: {len(train_df)}\")\n","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.905203Z","iopub.execute_input":"2023-12-18T13:21:39.905662Z","iopub.status.idle":"2023-12-18T13:21:39.909657Z","shell.execute_reply.started":"2023-12-18T13:21:39.905636Z","shell.execute_reply":"2023-12-18T13:21:39.908752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"Nombre d'images chargées sur train: {len(train_df)}\")\n","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.912096Z","iopub.execute_input":"2023-12-18T13:21:39.912461Z","iopub.status.idle":"2023-12-18T13:21:39.922432Z","shell.execute_reply.started":"2023-12-18T13:21:39.912435Z","shell.execute_reply":"2023-12-18T13:21:39.921298Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.info()","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.923715Z","iopub.execute_input":"2023-12-18T13:21:39.924598Z","iopub.status.idle":"2023-12-18T13:21:39.940062Z","shell.execute_reply.started":"2023-12-18T13:21:39.924556Z","shell.execute_reply":"2023-12-18T13:21:39.939007Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Charger les données\ndf = pd.read_csv('/kaggle/input/UBC-OCEAN/train.csv')\n\n# Créer le mappage des étiquettes textuelles aux ID numériques\nunique_labels = df['label'].unique()\nname_to_id = {name: id for id, name in enumerate(unique_labels)}\n\n# Ajouter la colonne 'label_id' au DataFrame\ndf['label_id'] = df['label'].map(name_to_id)\n\n# Calculer les statistiques\nnum_lignes = df.shape[0]\nnum_images = df['image_id'].nunique()\nnum_labels = df['label_id'].nunique()\nlabels = df['label_id'].unique()\n\n# Afficher les statistiques\nprint(f\"Nombre de lignes : {num_lignes}\")\nprint(f\"Nombre d'images uniques : {num_images}\")\nprint(f\"Nombre d'étiquettes uniques : {num_labels}\")\nprint(f\"Identifiants d'étiquettes uniques : {labels}\")","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.941336Z","iopub.execute_input":"2023-12-18T13:21:39.941704Z","iopub.status.idle":"2023-12-18T13:21:39.954566Z","shell.execute_reply.started":"2023-12-18T13:21:39.941678Z","shell.execute_reply":"2023-12-18T13:21:39.953546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nimport pandas as pd\n\n# Charger les données\ndf = pd.read_csv('/kaggle/input/UBC-OCEAN/train.csv')\n\n# Diviser en ensembles d'entraînement et de validation\ntrain_df, val_df = train_test_split(df, random_state=0)\n","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.955823Z","iopub.execute_input":"2023-12-18T13:21:39.956225Z","iopub.status.idle":"2023-12-18T13:21:39.968868Z","shell.execute_reply.started":"2023-12-18T13:21:39.956193Z","shell.execute_reply":"2023-12-18T13:21:39.967752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Afficher le nombre de lignes dans chaque sous-ensemble\nprint(f\"Taille de l'ensemble d'entraînement: {len(train_df)}\")\nprint(f\"Taille de l'ensemble de validation: {len(val_df)}\")\n","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.970541Z","iopub.execute_input":"2023-12-18T13:21:39.971257Z","iopub.status.idle":"2023-12-18T13:21:39.976471Z","shell.execute_reply.started":"2023-12-18T13:21:39.971213Z","shell.execute_reply":"2023-12-18T13:21:39.975683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Vérifiez la distribution des étiquettes\ndf = pd.read_csv('/kaggle/input/UBC-OCEAN/train.csv')\nif 'label' in df.columns:\n    print(\"\\nDistribution des étiquettes dans l'ensemble d'entraînement:\")\n    print(train_df['label'].value_counts())\n\n    print(\"\\nDistribution des étiquettes dans l'ensemble de validation:\")\n    print(val_df['label'].value_counts())","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:39.97742Z","iopub.execute_input":"2023-12-18T13:21:39.977706Z","iopub.status.idle":"2023-12-18T13:21:39.994423Z","shell.execute_reply.started":"2023-12-18T13:21:39.97768Z","shell.execute_reply":"2023-12-18T13:21:39.993581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"{num_lignes=}\")\nprint(f\"{num_images=}\")\nprint(f\"{num_labels=}\")\nprint(f\"{labels=}\")","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:40.088158Z","iopub.execute_input":"2023-12-18T13:21:40.089037Z","iopub.status.idle":"2023-12-18T13:21:40.09474Z","shell.execute_reply.started":"2023-12-18T13:21:40.089002Z","shell.execute_reply":"2023-12-18T13:21:40.093493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(data=df, x='label', order=df['label'].value_counts().index)\nplt.title('Distribution des Classes Cibles')\nplt.xlabel('Label')\nplt.ylabel('Nombre')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:40.096344Z","iopub.execute_input":"2023-12-18T13:21:40.097108Z","iopub.status.idle":"2023-12-18T13:21:40.34792Z","shell.execute_reply.started":"2023-12-18T13:21:40.097074Z","shell.execute_reply":"2023-12-18T13:21:40.345864Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Config:\n    is_submission = False\n    # Reproducibility\n    SEED = 42\n    \n    # Training\n    train_csv_path = \"/kaggle/input/UBC-OCEAN/train.csv\"\n    train_thumbnail_paths = \"/kaggle/input/UBC-OCEAN/train_thumbnails\"\n    batch_size = 8\n    learning_rate = 1e-3\n    epochs = 100\n    \n    # Inference\n    test_csv_path = \"/kaggle/input/UBC-OCEAN/test.csv\"\n    test_thumbnail_paths = \"/kaggle/input/UBC-OCEAN/test_thumbnails\"\n\nconfig = Config()","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:40.349264Z","iopub.execute_input":"2023-12-18T13:21:40.349587Z","iopub.status.idle":"2023-12-18T13:21:40.354976Z","shell.execute_reply.started":"2023-12-18T13:21:40.34956Z","shell.execute_reply":"2023-12-18T13:21:40.35378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Config:\n    is_submission = False\n    # Reproducibility\n    SEED = 42\n    \n    # Training\n    train_csv_path = \"/kaggle/input/UBC-OCEAN/train.csv\"\n    train_thumbnail_paths = \"/kaggle/input/UBC-OCEAN/train_thumbnails\"\n    batch_size = 8\n    learning_rate = 1e-3\n    epochs = 100\n    \n    # Inference\n    test_csv_path = \"/kaggle/input/UBC-OCEAN/test.csv\"\n    test_thumbnail_paths = \"/kaggle/input/UBC-OCEAN/test_thumbnails\"\n\nconfig = Config()","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:40.356601Z","iopub.execute_input":"2023-12-18T13:21:40.356961Z","iopub.status.idle":"2023-12-18T13:21:40.371823Z","shell.execute_reply.started":"2023-12-18T13:21:40.356914Z","shell.execute_reply":"2023-12-18T13:21:40.370661Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport matplotlib.pyplot as plt\nfrom PIL import Image\nimport numpy as np\n\n# Fonction pour charger les données\ndef load_data_from_directory(dirs):\n    data = []\n    labels = []\n\n    for dir_path in dirs:\n        for file_name in os.listdir(dir_path):\n            file_path = os.path.join(dir_path, file_name)\n            if file_path.endswith('.jpg') or file_path.endswith('.png'):\n                img = Image.open(file_path)\n                img_array = np.array(img)\n                data.append(img_array)\n                labels.append('label_id')  # Remplacer par le mécanisme de labellisation approprié\n\n    return data, labels\n","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:40.374773Z","iopub.execute_input":"2023-12-18T13:21:40.375221Z","iopub.status.idle":"2023-12-18T13:21:40.384911Z","shell.execute_reply.started":"2023-12-18T13:21:40.375181Z","shell.execute_reply":"2023-12-18T13:21:40.383745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Fonction pour afficher les images\ndef display_sample_images(images, label_ids, n=5):\n    plt.figure(figsize=(10, 2 * n))\n    for i in range(min(n, len(images))):\n        plt.subplot(n, 1, i + 1)\n        plt.imshow(images[i], cmap='gray')  # Assurez-vous que le cmap est approprié pour vos images\n        plt.title(f\"Label ID: {label_ids[i]}\")  # Affiche la valeur numérique de l'étiquette\n        plt.axis('off')\n    plt.tight_layout()\n    plt.show()\n\n\n# Définir les chemins des répertoires sur Kaggle\ndirectories = ['/kaggle/input/UBC-OCEAN/train_thumbnails']\n\n# Charger les données\ndata, labels = load_data_from_directory(directories)\n\n# Afficher les images et les étiquettes\ndisplay_sample_images(data, labels, n=5)","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:21:40.386541Z","iopub.execute_input":"2023-12-18T13:21:40.387059Z","iopub.status.idle":"2023-12-18T13:24:05.395069Z","shell.execute_reply.started":"2023-12-18T13:21:40.387018Z","shell.execute_reply":"2023-12-18T13:24:05.393895Z"},"trusted":true},"execution_count":null,"outputs":[]}]}