{"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":false,"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:45:17.435316Z","iopub.execute_input":"2023-12-18T13:45:17.436435Z","iopub.status.idle":"2023-12-18T13:45:17.444904Z","shell.execute_reply.started":"2023-12-18T13:45:17.436382Z","shell.execute_reply":"2023-12-18T13:45:17.443123Z"},"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:45:17.447148Z","iopub.execute_input":"2023-12-18T13:45:17.447782Z","iopub.status.idle":"2023-12-18T13:45:17.479282Z","shell.execute_reply.started":"2023-12-18T13:45:17.447745Z","shell.execute_reply":"2023-12-18T13:45:17.4784Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"Nombre d'images chargées sur train: {len(train_df)}\")","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:45:17.480756Z","iopub.execute_input":"2023-12-18T13:45:17.481513Z","iopub.status.idle":"2023-12-18T13:45:17.486978Z","shell.execute_reply.started":"2023-12-18T13:45:17.481479Z","shell.execute_reply":"2023-12-18T13:45:17.48575Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"Nombre d'images chargées sur train: {len(train_df)}\")","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:45:17.488659Z","iopub.execute_input":"2023-12-18T13:45:17.489709Z","iopub.status.idle":"2023-12-18T13:45:17.50012Z","shell.execute_reply.started":"2023-12-18T13:45:17.489668Z","shell.execute_reply":"2023-12-18T13:45:17.498972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.info()","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:45:17.502924Z","iopub.execute_input":"2023-12-18T13:45:17.503642Z","iopub.status.idle":"2023-12-18T13:45:17.519588Z","shell.execute_reply.started":"2023-12-18T13:45:17.503601Z","shell.execute_reply":"2023-12-18T13:45:17.518241Z"},"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:45:17.521155Z","iopub.execute_input":"2023-12-18T13:45:17.521736Z","iopub.status.idle":"2023-12-18T13:45:17.536322Z","shell.execute_reply.started":"2023-12-18T13:45:17.521704Z","shell.execute_reply":"2023-12-18T13:45:17.534731Z"},"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)","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:45:17.537758Z","iopub.execute_input":"2023-12-18T13:45:17.538524Z","iopub.status.idle":"2023-12-18T13:45:17.548548Z","shell.execute_reply.started":"2023-12-18T13:45:17.53849Z","shell.execute_reply":"2023-12-18T13:45:17.547661Z"},"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)}\")","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:45:17.549752Z","iopub.execute_input":"2023-12-18T13:45:17.550147Z","iopub.status.idle":"2023-12-18T13:45:17.560963Z","shell.execute_reply.started":"2023-12-18T13:45:17.550116Z","shell.execute_reply":"2023-12-18T13:45:17.55979Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Vérifiez la distribution des étiquettes\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:45:17.562763Z","iopub.execute_input":"2023-12-18T13:45:17.563176Z","iopub.status.idle":"2023-12-18T13:45:17.580226Z","shell.execute_reply.started":"2023-12-18T13:45:17.563144Z","shell.execute_reply":"2023-12-18T13:45:17.579204Z"},"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:45:17.583008Z","iopub.execute_input":"2023-12-18T13:45:17.583874Z","iopub.status.idle":"2023-12-18T13:45:17.593576Z","shell.execute_reply.started":"2023-12-18T13:45:17.58381Z","shell.execute_reply":"2023-12-18T13:45:17.592544Z"},"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:45:17.594671Z","iopub.execute_input":"2023-12-18T13:45:17.59528Z","iopub.status.idle":"2023-12-18T13:45:17.866977Z","shell.execute_reply.started":"2023-12-18T13:45:17.595248Z","shell.execute_reply":"2023-12-18T13:45:17.865905Z"},"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:45:17.868657Z","iopub.execute_input":"2023-12-18T13:45:17.869016Z","iopub.status.idle":"2023-12-18T13:45:17.875518Z","shell.execute_reply.started":"2023-12-18T13:45:17.868986Z","shell.execute_reply":"2023-12-18T13:45:17.874228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\n\n# Charger les données dans df\ndf = pd.read_csv(\"/kaggle/input/UBC-OCEAN/train.csv\")\n\ndf_one_hot = pd.get_dummies(df[\"label\"], prefix=\"label\").astype(int)\ntrain_df = pd.concat([df[\"image_id\"], df_one_hot], axis=1)\n\ntrain_df[\"image_thumbnail_path\"] = train_df[\"image_id\"].apply(lambda x: f\"{config.train_thumbnail_paths}/{x}_thumbnail.png\")\n\nimage_thumbnail_paths = train_df[\"image_thumbnail_path\"].values\nlabels = train_df[[col for col in train_df.columns if col.startswith(\"label_\")]].values\nprint(labels[:5])","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:45:17.876731Z","iopub.execute_input":"2023-12-18T13:45:17.877179Z","iopub.status.idle":"2023-12-18T13:45:17.898731Z","shell.execute_reply.started":"2023-12-18T13:45:17.877139Z","shell.execute_reply":"2023-12-18T13:45:17.897435Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\ntrain_df = pd.read_csv('/kaggle/input/UBC-OCEAN/train.csv')\ntest_df = pd.read_csv('/kaggle/input/UBC-OCEAN/test.csv')\noutput_df = pd.DataFrame({\n    'image_id': test_df['image_id'],\n    'label': np.random.choice(['HGSC', 'LGSC', 'EC', 'MC', 'CC'], size=len(test_df))\n})\n\noutput_df.to_csv('/kaggle/working/submission.csv', index=False)\n\nprint(output_df)","metadata":{"execution":{"iopub.status.busy":"2023-12-18T13:45:17.900252Z","iopub.execute_input":"2023-12-18T13:45:17.90112Z","iopub.status.idle":"2023-12-18T13:45:17.923182Z","shell.execute_reply.started":"2023-12-18T13:45:17.901079Z","shell.execute_reply":"2023-12-18T13:45:17.922085Z"},"trusted":true},"execution_count":null,"outputs":[]}]}