{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport pandas as pd\nimport numpy as np\nfrom tqdm.auto import tqdm\nimport matplotlib.pyplot as plt\nfrom skimage import io\nfrom skimage.color import rgb2gray\nfrom skimage.transform import resize\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Conv2D, Flatten\nfrom keras.utils import to_categorical\n\n# Definindo a classe de configuração (CFG)\nclass CFG:\n    TRAIN_THUMBNAILS_PATH = \"/kaggle/input/UBC-OCEAN/train_thumbnails\"\n    TRAIN_FULL_PATH = \"/kaggle/input/UBC-OCEAN/train_images\"\n    TEST_THUMBNAILS_PATH = \"/kaggle/input/UBC-OCEAN/test_thumbnails\"\n    TEST_FULL_PATH = \"/kaggle/input/UBC-OCEAN/test_images\"\n\n# Carregando os dados de treinamento\ntrain = pd.read_csv('/kaggle/input/UBC-OCEAN/train.csv')\n\n# Obtendo as classes únicas\nclasses = train['label'].unique().tolist()\nclasses.append(\"Other\")\n\n# Definindo probabilidades para uso posterior\nproba = [0.4, 0.2, 0.1, 0.075, 0.075, 0.15]\n\n# Carregando apenas miniaturas (is_tma == False) e redimensionando para (128,128)\nimages = []\nlabels = []\nfor (i, row) in tqdm(train.iterrows(), total=538):\n    if row['is_tma']:\n        continue\n    img = io.imread(os.path.join(CFG.TRAIN_THUMBNAILS_PATH, str(row['image_id'])+\"_thumbnail.png\"))\n    img = rgb2gray(img)\n    img = resize(img, (128, 128), anti_aliasing=False)\n    img = img.reshape(128, 128, 1)\n    images.append(img)\n    labels.append(row['label'])\nimages = np.array(images)\nlabels = np.array(labels)\nX = images.copy()\n\n# Codificando rótulos usando One-Hot Encoding\nencoder = OneHotEncoder(sparse_output=False)\nlabel_encoded = encoder.fit_transform(labels.reshape(-1, 1))\nY = label_encoded\n\n# Definindo e compilando o modelo CNN\nmodel = Sequential()\nmodel.add(Conv2D(filters=64, kernel_size=3, strides=(2, 1), padding='same', activation='relu', input_shape=(128, 128, 1)))\nmodel.add(Flatten())\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dense(32, activation='relu'))\nmodel.add(Dense(5, activation='softmax'))\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n\n# Treinando o modelo\nhistory = model.fit(X, Y, batch_size=8, epochs=6)\n\n# Salvando o modelo treinado\nmodel.save(\"model.h5\")\n\n# Carregando os dados de teste\ntest = pd.read_csv(\"/kaggle/input/UBC-OCEAN/test.csv\")\n\n# Realizando previsões para os dados de teste\nnp.random.seed(69)\nthumbnails = os.listdir(CFG.TEST_THUMBNAILS_PATH)\npreds = []\nfor (i, row) in tqdm(test.iterrows()):\n    if str(row['image_id'])+\"_thumbnail.png\" not in thumbnails:\n        print(row['id'])\n        preds.append(np.random.choice(classes, p=proba))\n    img = io.imread(os.path.join(CFG.TEST_THUMBNAILS_PATH, str(row['image_id'])+\"_thumbnail.png\"))\n    img = rgb2gray(img)\n    img = resize(img, (128, 128), anti_aliasing=False)\n    img = img.reshape(128, 128, 1)\n    prediction = encoder.inverse_transform(model.predict(np.array([img])))[0][0]\n    preds.append(prediction)\n\n# Criando um DataFrame de submissão\nsample_submission = pd.read_csv(\"/kaggle/input/UBC-OCEAN/sample_submission.csv\")\nsample_submission['label'] = preds\n\n# Salvando o arquivo de submissão\nsample_submission.to_csv('submission.csv', index=False)\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-10-07T19:47:12.875025Z","iopub.execute_input":"2023-10-07T19:47:12.875566Z","iopub.status.idle":"2023-10-07T19:53:40.868859Z","shell.execute_reply.started":"2023-10-07T19:47:12.875523Z","shell.execute_reply":"2023-10-07T19:53:40.867907Z"},"trusted":true},"execution_count":null,"outputs":[]}]}