{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":3649,"databundleVersionId":46718,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install py7zr\n!pip install fastai","metadata":{"execution":{"iopub.status.busy":"2024-10-06T11:42:36.771843Z","iopub.execute_input":"2024-10-06T11:42:36.772275Z","iopub.status.idle":"2024-10-06T11:43:01.218522Z","shell.execute_reply.started":"2024-10-06T11:42:36.772234Z","shell.execute_reply":"2024-10-06T11:43:01.217309Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nfrom py7zr import unpack_7zarchive\nimport shutil\nfrom fastai.vision.all import *","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)\nshutil.unpack_archive('../input/cifar-10/train.7z', '/kaggle/temp/')\nlabel_data = pd.read_csv(\"../input/cifar-10/trainLabels.csv\", header=\"infer\")\ncategory_names = label_data['label'].unique()\nprint(category_names)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not os.path.exists(\"/kaggle/temp/validation\"):\n    os.mkdir(\"/kaggle/temp/validation\")\n\ntrain_dir = \"/kaggle/temp/train\"\nvalid_dir = \"/kaggle/temp/validation\"\n\nfor category in category_names:\n    train_path = os.path.join(train_dir, category)\n    if not os.path.exists(train_path):\n        os.mkdir(train_path)\n    valid_path = os.path.join(valid_dir, category)\n    if not os.path.exists(valid_path):\n        os.mkdir(valid_path)\n\nfor _, record in label_data.iterrows():\n    image_id = str(record[\"id\"]) + \".png\"\n    src_path = os.path.join(train_dir, image_id)\n    split_prob = np.random.random()\n    if split_prob <= 0.8:\n        dest_path = os.path.join(train_dir, record[\"label\"], image_id)\n        os.replace(src_path, dest_path)\n    else:\n        dest_path = os.path.join(valid_dir, record[\"label\"], image_id)\n        os.replace(src_path, dest_path)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_transforms = [*aug_transforms(), Normalize.from_stats(*imagenet_stats)]\n\nhyperparams = {\n    'weight_decay': 1.0926394630175528e-05, \n    'learning_rate': 0.0010735670527912773, \n    'batch_size': 64, \n    'dropout': 0.3026304379895585, \n    'scheduler': 'one_cycle'\n}\n\nepoch_count = 20","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dls = ImageDataLoaders.from_folder(path='/kaggle/temp', train='train', valid='validation',\n                                   item_tfms=Resize(224), batch_tfms=batch_transforms, bs=hyperparams['batch_size'])\n\nlearner = vision_learner(dls, resnet50, pretrained=False, metrics=accuracy, wd=hyperparams['weight_decay'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if hasattr(learner.model[1], 'p'):\n    learner.model[1].p = hyperparams['dropout']\n\nif hyperparams['scheduler'] == 'one_cycle':\n    learner.fit_one_cycle(epoch_count, lr_max=hyperparams['learning_rate'])\nelse:\n    learner.fit_flat_cos(epoch_count, lr=hyperparams['learning_rate'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.unpack_archive('../input/cifar-10/test.7z', '/kaggle/temp/test')\nshutil.unregister_unpack_format('7zip')\ntest_path = '/kaggle/temp/test/test'\nfiles = os.listdir(test_path)\ntest_images = [str(test_path)+'/'+file for file in files]\ntest_dl = learner.dls.test_dl(test_images)\npredictions, _ = learner.get_preds(dl=test_dl)\npredicted_labels = np.argmax(predictions, axis=1)\npredicted_labels_list = predicted_labels.tolist()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_map = {0: 'airplane', 1: 'automobile', 2: 'bird', 3: 'cat', 4: 'deer', \n             5: 'dog', 6: 'frog', 7: 'horse', 8: 'ship', 9: 'truck'}\n\npredicted_classes_arr = np.empty(shape=300000, dtype=np.dtype('U20'))\n\nidx = 0\nfor label in predicted_labels_list:\n    predicted_classes_arr[idx] = label_map[label]\n    idx += 1\n\ntest_dir = '/kaggle/temp/test/test'\nimage_ids = [''.join(filter(str.isdigit, name)) for name in os.listdir(test_dir)]\nsubmission_df = pd.DataFrame({\n    \"id\": image_ids,\n    \"label\": predicted_classes_arr\n})\n\nsubmission_size = max(30000, len(submission_df))\nif len(submission_df) < submission_size:\n    repeat_times = (submission_size // len(submission_df)) + 1\n    submission_df = pd.concat([submission_df] * repeat_times, ignore_index=True).head(submission_size)\n\nsubmission_df.to_csv(\"cifar-10-submission.csv\", index=False)\nlearner.save('/kaggle/working/vision')\n\nprint('Submission file created with 300,000 rows.')\n","metadata":{},"execution_count":null,"outputs":[]}]}