{"cells":[{"metadata":{"_uuid":"d3dde4e51ec6a67e8b218bfd6e18b1d5b99d7ef6"},"cell_type":"markdown","source":"# **1.Peapare Enviroment**"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"%reload_ext autoreload\n%autoreload 2\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9b605ab09b5f6876f1da845d3c3349b084fb4a5e"},"cell_type":"code","source":"from fastai import *\nfrom fastai.vision import *","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7cf191dcac60fe21bed6cef3ed2c67598af23d1a"},"cell_type":"code","source":"print(torch.cuda.is_available(), torch.backends.cudnn.enabled)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d9f717c68ed753e6bcbdfdac1f3f0c52fdaf3768"},"cell_type":"markdown","source":"# **2.Peapare Data**"},{"metadata":{"trusted":true,"_uuid":"135a90b5ab1b84a3586d944f28f949be8102ed6d"},"cell_type":"code","source":"path_model='/kaggle/working/'\npath_input=\"/kaggle/input/\"\nlabel_df = pd.read_csv(f\"{path_input}labels.csv\")\nlabel_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"067a1a2a7858384961481cd4049aa6a0c3ac8a6c"},"cell_type":"code","source":"label_df.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ce5d03bc846d9a1b539fcee9dfe5a29497b41992"},"cell_type":"code","source":"label_df.pivot_table(index='breed',aggfunc=len).sort_values('id',ascending=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b137cdad1ef9c00c452338514756e965286e9997"},"cell_type":"code","source":"data = ImageDataBunch.from_csv(\n                      path_input,\n                      folder='train',\n                      valid_pct=0.2,\n                      ds_tfms=get_transforms(flip_vert=True,max_rotate=20., max_zoom=1.1),\n                      size=224,\n                      test='/kaggle/input/test/test',\n                      suffix='.jpg',\n                      bs=64,\n                      num_workers=0).normalize(imagenet_stats)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"accfebea6608a113c5a30c08fe2c4592aed62c77","scrolled":true},"cell_type":"code","source":"data.show_batch(rows=3, figsize=(8,8))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0976411d3d9b3cee7621314556d14ff9d4e52ad0"},"cell_type":"code","source":"[print(len(e)) for e in [data.train_ds, data.valid_ds, data.test_ds]]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1edb35a4a6df56a1f0bc2c38465acd9a1da7b5bf"},"cell_type":"code","source":"files = os.listdir(f'{path_input}train/')[:5]\nimg = plt.imread(f'{path_input}train/{files[0]}')\nplt.imshow(img)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ee95c14a63c8035134260de423dd3b47526207d1"},"cell_type":"markdown","source":"# **3.Create & Train Network**"},{"metadata":{"trusted":true,"_uuid":"d26983eacb9882b24a3784d7137b0c4b6f57f493","scrolled":true},"cell_type":"code","source":"#learner = Learner(data, models.resnet50, metrics=[accuracy], )\nlearner = create_cnn(data,models.resnet50,metrics=[accuracy],model_dir=f'{path_model}')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"992120a012fcb43e51408254ac3488d4f5b5729b"},"cell_type":"code","source":"learner.fit_one_cycle(3)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"355162e32bd6fe34706dfb0088c3c88c13d7ff2e"},"cell_type":"markdown","source":"---"},{"metadata":{"_uuid":"214813581466c96d969cce83b83736c55d087419"},"cell_type":"markdown","source":"# **4.Predict**\n"},{"metadata":{"trusted":true,"_uuid":"7672d8a1a8c8650b6f3728cbb969cb69cdbbffc8"},"cell_type":"code","source":"np.set_printoptions(precision=6, suppress=True)\ntest_result = learner.get_preds(ds_type=DatasetType.Test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"641a5aec6c4b702cd007daee740422f1563f9fdc"},"cell_type":"code","source":"for i in range(0, 12):\n    print(np.array(test_result[0][1][i*10:i*10+10]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1803a03ac969ceb16a892acdc9e6dcee7f37c5ef"},"cell_type":"markdown","source":"# **5.Submission**\nfollowing the [format of result](https://www.kaggle.com/c/dog-breed-identification#evaluation):\n\n> &nbsp;&nbsp;id,affenpinscher,afghan_hound,..,yorkshire_terrier<br/>\n&nbsp;&nbsp;000621fb3cbb32d8935728e48679680e,0.0083,0.0,...,0.0083<br/>\n&nbsp;&nbsp;etc.\n"},{"metadata":{"trusted":true,"_uuid":"12b3ed4a35ec90e6381e704c2588af631cfb4586"},"cell_type":"code","source":"pd.options.display.float_format = '{:.6f}'.format\ndf = pd.DataFrame(np.array(test_result[0]))\ndf.columns = data.classes\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"84754f3e18db21c8a3b8187001bf98200302c90c"},"cell_type":"code","source":"df.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"eae2f00bed401e45bcd01916fbafadb64511f2f0"},"cell_type":"code","source":"# insert clean ids - without folder prefix and .jpg suffix - of images as first column\ndf.insert(0, \"id\", [e.name[:-4] for e in data.test_ds.x.items])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"36538f830c10b1337add9ff185b18fbaeede4b78"},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"100ed91bf3a26e76b2bfb97bd0dcbb954fa9dd56"},"cell_type":"code","source":"df.to_csv(f\"dog-breed-identification-submission.csv\", index=False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}