{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# Any results you write to the current directory are saved as output.\n#!pip install ../input/pretrainedmodels/pretrainedmodels-0.7.4/pretrainedmodels-0.7.4/\n!pip install ../input/efficientnet-pytorch/EfficientNet-PyTorch-master","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import torch\nfrom torch import nn\nimport pandas as pd\nimport numpy as np\nimport cv2\nfrom torch.utils.data import Dataset, DataLoader\nfrom collections import OrderedDict\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch\nimport gc","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"BATCH_SIZE=512\nTEST_FILE_PATH='/kaggle/input/bengaliai-cv19/test.csv'\nDATA_DIR='/kaggle/input/bengaliai-cv19/'\nMODEL_PATH='/kaggle/input/12345678/checkpoint-epoch50.pth'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class test_dataset(torch.utils.data.Dataset):\n    \n    def __init__(self,test_dir):\n        \n        self.dir=test_dir\n        self.data=pd.read_parquet(self.dir)\n        \n    def __len__(self):\n        return self.data.shape[0]\n    \n    def __getitem__(self,idx):\n        data=(self.data.iloc[idx].to_numpy()[1:].reshape([1, 137, 236])/255).astype('float')\n        data=torch.from_numpy(data).cuda().float()\n        return {'data':data,'id':torch.tensor(idx).cuda()}","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import torch.nn as nn\nimport torch.nn.functional as F\nimport torch\nfrom efficientnet_pytorch import EfficientNet\n\n\nclass efficientnet_b1(nn.Module):\n\n    def __init__(self):\n        super(efficientnet_b1, self).__init__()\n        model = EfficientNet.from_name('efficientnet-b1')\n        self.conv1 = torch.nn.Conv2d(1, 32, (3, 3))\n        self.layer0 = model._bn0\n        self.layer1 = model._blocks\n        self.layer2 = model._conv_head\n        self.layer3 = model._bn1\n        self.layer4 = model._avg_pooling\n        self.layer5 = model._dropout\n        self.fc1 = torch.nn.Linear(1280, 168)\n        self.fc2 = torch.nn.Linear(1280, 11)\n        self.fc3 = torch.nn.Linear(1280, 7)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = self.layer0(x)\n        for layer in self.layer1:\n            x=layer(x)\n        x = self.layer2(x)\n        x = self.layer3(x)\n        x = self.layer4(x)\n        x = self.layer5(x)\n        x = torch.flatten(x, 1)\n        x1 = self.fc1(x)\n        x2 = self.fc2(x)\n        x3 = self.fc3(x)\n        return [x1, x2, x3]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"torch.cuda.empty_cache()\nwith torch.no_grad():\n    model1=efficientnet_b1()\n    model1=torch.nn.DataParallel(model1,device_ids=[0])\n    model1.eval()\n    model1.load_state_dict(torch.load('/kaggle/input/all-models/checkpoint-epoch23.pth'))\n    \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"gc.collect()\ntest_data=['test_image_data_0.parquet','test_image_data_1.parquet','test_image_data_2.parquet','test_image_data_3.parquet']\n#test_file=pd.read_csv('/kaggle/input/bengaliai-cv19/train.csv')\ntest_id_answer={}\ngrapheme_root_list=[]\nvowel_diacritic_list=[]\nconsonant_diacritic_list=[]\nwith torch.no_grad():\n    for data_dir in test_data:\n        dataset=pd.read_parquet(DATA_DIR+data_dir).iloc[:,1:].to_numpy().reshape([-1,1,137,236])\n        dataset=np.array_split(dataset, 50210//128)\n        for data in dataset:\n            input_data=torch.from_numpy(data/255).float().cuda()\n            print(input_data.size())\n            output=model1(input_data)\n            grapheme_root_list.extend(np.argmax(output[0].cpu().detach().numpy(),axis=1))\n            vowel_diacritic_list.extend(np.argmax(output[1].cpu().detach().numpy(),axis=1))\n            consonant_diacritic_list.extend(np.argmax(output[2].cpu().detach().numpy(),axis=1))\n            del input_data,output\n            gc.collect()\n            torch.cuda.empty_cache()\n        del dataset\n        gc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"z=len(consonant_diacritic_list)\nrow_id=[]\ntarget=[]\nfor i in range(z):\n    row_id.append('Test_{}_consonant_diacritic'.format(i))\n    row_id.append('Test_{}_grapheme_root'.format(i))\n    row_id.append('Test_{}_vowel_diacritic'.format(i))\n    target.append(consonant_diacritic_list[i])\n    target.append(grapheme_root_list[i])\n    target.append(vowel_diacritic_list[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"final_file=pd.DataFrame({'row_id':row_id, 'target':target},columns = ['row_id','target'] )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"final_file.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"final_file","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":1}