{"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 numpy as np\nimport pandas as pd\nfrom fastai.vision.all import *\nimport shutil\nimport os\n!pip install py7zr\nfrom py7zr import unpack_7zarchive\n\n# List files\nfor dirname, _, filenames in os.walk(\"/kaggle/input\"):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# Unpack data\nshutil.register_unpack_format(\"7zip\", [\".7z\"], unpack_7zarchive)\nshutil.unpack_archive(\"../input/cifar-10/train.7z\", \"/kaggle/temp/\")\ntrain_labels = pd.read_csv(\"../input/cifar-10/trainLabels.csv\", header=\"infer\")\nclasses = train_labels[\"label\"].unique()\nprint(classes)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Prepare directories\nif not os.path.exists(\"/kaggle/temp/valid\"):\n    os.mkdir(\"/kaggle/temp/valid\")\nparent_path_train = \"/kaggle/temp/train\"\nparent_path_valid = \"/kaggle/temp/valid\"\n\nfor class1 in classes:\n    path_train = os.path.join(parent_path_train, class1)\n    if not os.path.exists(path_train):\n        os.mkdir(path_train)\n    path_valid = os.path.join(parent_path_valid, class1)\n    if not os.path.exists(path_valid):\n        os.mkdir(path_valid)\n\nfor (int_ind, row) in train_labels.iterrows():\n    id = str(row[\"id\"]) + \".png\"\n    source_path = os.path.join(parent_path_train, id)\n    p = np.random.random()\n    if p <= 0.8:\n        target_path = os.path.join(parent_path_train, row[\"label\"], id)\n    else:\n        target_path = os.path.join(parent_path_valid, row[\"label\"], id)\n    os.replace(source_path, target_path)\n\n# Data augmentation\nbatch_tfms = [*aug_transforms(do_flip=True, flip_vert=False, max_rotate=10.0, min_zoom=1.0, max_zoom=1.1, max_lighting=0.2, max_warp=0.2, p_affine=0.75, p_lighting=0.75), Normalize.from_stats(*imagenet_stats)]\ndls = ImageDataLoaders.from_folder(path=\"/kaggle/temp\", train=\"train\", valid=\"valid\", item_tfms=Resize(224), bs=64, batch_tfms=batch_tfms)\n\ndls.show_batch()\n\n# Training the model with resnet101 and MixUp\nlearn = vision_learner(dls, resnet101, metrics=accuracy, cbs=MixUp())\n\n# Fit using fit_flat_cos for a change in learning rate schedule and then unfreeze\nlearn.fit_flat_cos(3, 3e-3)\nlearn.unfreeze()\nlearn.fit_flat_cos(5, slice(1e-6, 3e-5))\n\n# Validate the model on the validation set and print accuracy\nloss, accuracy_val = learn.validate()\nprint(f\"Validation accuracy: {accuracy_val*100:.2f}%\")\n\nlearn.recorder.plot_loss()\n\n# Unpack test data\nshutil.unpack_archive(\"/kaggle/input/cifar-10/test.7z\", \"/kaggle/temp/test\")\nshutil.unregister_unpack_format(\"7zip\")\n\nlearn.save(\"/kaggle/working/vision\")\n\npath = \"/kaggle/temp/test/test\"\nf = os.listdir(path)\nnew = [str(path) + \"/\" + s for s in f]\ntest_dl = learn.dls.test_dl(new)\nclass_score, y = learn.get_preds(dl=test_dl)\nclass_score = np.argmax(class_score, axis=1)\nclassScore = class_score.tolist()\n\nclasses = {\n    0: \"airplane\", 1: \"automobile\", 2: \"bird\", 3: \"cat\", 4: \"deer\", 5: \"dog\", 6: \"frog\", 7: \"horse\", 8: \"ship\", 9: \"truck\"\n}\npredicted_classes = [classes[i] for i in classScore]\n\ndirectory = \"/kaggle/temp/test/test\"\nImageId = [(\"\".join(filter(str.isdigit, name))) for name in os.listdir(directory)]\nsubmission = pd.DataFrame({\"id\": ImageId, \"label\": predicted_classes})\nsubmission[\"id\"] = submission[\"id\"].astype(int)\nsubmission.to_csv(\"submission.csv\", index=False)\n\nim = Image.open(\"/kaggle/temp/test/test/134190.png\")\nim.to_thumb(254, 254)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}