{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":40012,"databundleVersionId":4380823,"sourceType":"competition"}],"dockerImageVersionId":30747,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.applications import InceptionV3\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Dropout, Flatten, GlobalAveragePooling2D, BatchNormalization\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras import layers, models\nfrom tensorflow.keras import initializers\nfrom tensorflow.keras.regularizers import l2\nfrom PIL import Image, ImageFile\n\npath_to_train = \"/kaggle/input/finding-disney/train\"\n\n# Ensure the image can be loaded despite being truncated\nImageFile.LOAD_TRUNCATED_IMAGES = True\n\ntrain_val_datagen = ImageDataGenerator(\n    rescale=1./255,\n    validation_split=0.2\n)\n\ntrain_ds = train_val_datagen.flow_from_directory(\n    path_to_train,\n    target_size=(180, 180),\n    batch_size=32,\n    class_mode='categorical',\n    subset='training'\n)\n\nval_ds = train_val_datagen.flow_from_directory(\n    path_to_train,\n    target_size=(180, 180),\n    batch_size=32,\n    class_mode='categorical',\n    subset='validation'\n)\n\nnum_classes = 6\ninput_shape = (180, 180, 3)\n\nbase_model = InceptionV3(weights='imagenet', include_top=False, input_shape=input_shape)\nbase_model.trainable = False\n\nmodel = models.Sequential([\n    base_model,\n    layers.GlobalAveragePooling2D(),\n    Dense(units=320, kernel_initializer=initializers.he_normal(), bias_initializer='zeros', kernel_regularizer=l2(0.01)),\n    BatchNormalization(),\n    Dropout(0.5),\n    Dense(num_classes, activation='softmax')\n])\n\nmodel.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])\n\nhistory = model.fit(train_ds, epochs=10, validation_data=val_ds)\n","metadata":{"execution":{"iopub.status.busy":"2024-08-09T16:17:24.632994Z","iopub.execute_input":"2024-08-09T16:17:24.633348Z","iopub.status.idle":"2024-08-09T16:25:16.204171Z","shell.execute_reply.started":"2024-08-09T16:17:24.633322Z","shell.execute_reply":"2024-08-09T16:25:16.203339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport os\nimport re\n\npath_to_test = \"/kaggle/input/finding-disney/test/\"\n\nimage_size = (180, 180)\n\nfilenames = []\n\nfor filename in os.listdir(path_to_test):\n    filenames.append(filename)\n\nimages = []\n\nfor file_name in filenames:\n    img = Image.open(os.path.join(path_to_test,file_name))\n    img = img.resize(image_size)\n    img = np.array(img)\n    img_array = np.array(img)/255.0\n    images.append(img_array)\n\nfilenames = [re.sub(r'\\.jpg$', '', filename) for filename in filenames]\n\nimages_array_rgb = np.array([img if img.shape[-1] == 3 else np.stack([img, img, img], axis=-1) for img in images])\n\nclassnames = [\"donald\", \"mickey\", \"minion\", \"olaf\", \"pooh\", \"pumba\"]\n\npredictions = model.predict(images_array_rgb)\n\nmapper = {}\n\nfor i, prediction in enumerate(predictions):\n    mapper[filenames[i]] = classnames[np.argmax(prediction)]\n\n\nres = pd.DataFrame(list(mapper.items()), columns=['character_id', 'label'])\n\nres.to_csv('submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2024-08-09T16:26:58.175225Z","iopub.execute_input":"2024-08-09T16:26:58.176143Z","iopub.status.idle":"2024-08-09T16:27:03.871890Z","shell.execute_reply.started":"2024-08-09T16:26:58.176105Z","shell.execute_reply":"2024-08-09T16:27:03.870862Z"},"trusted":true},"execution_count":null,"outputs":[]}]}