{"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":"tpu1vmV38","dataSources":[{"sourceType":"competition","sourceId":51294,"databundleVersionId":7331882},{"sourceType":"datasetVersion","sourceId":7364321,"datasetId":4278124,"databundleVersionId":7454841},{"sourceType":"datasetVersion","sourceId":7649407,"datasetId":4299302,"databundleVersionId":7746123},{"sourceType":"datasetVersion","sourceId":8318191,"datasetId":4459124,"databundleVersionId":8449353},{"sourceType":"datasetVersion","sourceId":7639698,"datasetId":4299272,"databundleVersionId":7736182}],"dockerImageVersionId":30627,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport torch\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport torch\nimport random","metadata":{"execution":{"iopub.status.busy":"2024-05-21T01:42:38.924339Z","iopub.execute_input":"2024-05-21T01:42:38.924751Z","iopub.status.idle":"2024-05-21T01:43:01.126596Z","shell.execute_reply.started":"2024-05-21T01:42:38.924715Z","shell.execute_reply":"2024-05-21T01:43:01.125782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Define Dataset","metadata":{}},{"cell_type":"code","source":"from torch.utils.data import Dataset, DataLoader\n\nclass RNA_Dataset(Dataset):\n    def __init__(self,data):\n        self.data=data\n        self.tokens={nt:i for i,nt in enumerate('ACGU')}\n\n    def __len__(self):\n        return len(self.data)\n    \n    def __getitem__(self, idx):\n        sequence=[self.tokens[nt] for nt in self.data.loc[idx,'sequence']]\n        sequence=np.array(sequence)\n        sequence=torch.tensor(sequence)\n\n        return {'sequence':sequence}","metadata":{"execution":{"iopub.status.busy":"2024-05-21T01:43:01.128007Z","iopub.execute_input":"2024-05-21T01:43:01.128363Z","iopub.status.idle":"2024-05-21T01:43:01.133572Z","shell.execute_reply.started":"2024-05-21T01:43:01.128329Z","shell.execute_reply":"2024-05-21T01:43:01.132911Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data=pd.read_csv(\"/kaggle/input/stanford-ribonanza-rna-folding/test_sequences.csv\")\ntest_dataset=RNA_Dataset(test_data)\ntest_dataset[0]","metadata":{"execution":{"iopub.status.busy":"2024-05-21T01:43:01.134301Z","iopub.execute_input":"2024-05-21T01:43:01.134524Z","iopub.status.idle":"2024-05-21T01:43:08.247779Z","shell.execute_reply.started":"2024-05-21T01:43:01.134498Z","shell.execute_reply":"2024-05-21T01:43:08.247051Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(test_data)","metadata":{"execution":{"iopub.status.busy":"2024-05-21T01:43:08.249199Z","iopub.execute_input":"2024-05-21T01:43:08.249444Z","iopub.status.idle":"2024-05-21T01:43:08.25396Z","shell.execute_reply.started":"2024-05-21T01:43:08.249419Z","shell.execute_reply":"2024-05-21T01:43:08.253271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_sub = pd.read_csv(\"/kaggle/input/stanford-ribonanza-rna-folding/sample_submission.csv\")\nsample_sub","metadata":{"execution":{"iopub.status.busy":"2024-05-21T01:43:18.867967Z","iopub.execute_input":"2024-05-21T01:43:18.868373Z","iopub.status.idle":"2024-05-21T01:44:05.880303Z","shell.execute_reply.started":"2024-05-21T01:43:18.868338Z","shell.execute_reply":"2024-05-21T01:44:05.879514Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_sub.to_csv(\"submission.csv\",index=False)","metadata":{"execution":{"iopub.status.busy":"2024-05-21T01:44:13.886009Z","iopub.execute_input":"2024-05-21T01:44:13.886357Z","iopub.status.idle":"2024-05-21T01:49:13.14643Z","shell.execute_reply.started":"2024-05-21T01:44:13.88632Z","shell.execute_reply":"2024-05-21T01:49:13.145173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Define Model","metadata":{}},{"cell_type":"code","source":"! pip install einops","metadata":{"execution":{"iopub.status.busy":"2024-04-25T05:59:49.119212Z","iopub.execute_input":"2024-04-25T05:59:49.119457Z","iopub.status.idle":"2024-04-25T05:59:53.469086Z","shell.execute_reply.started":"2024-04-25T05:59:49.119432Z","shell.execute_reply":"2024-04-25T05:59:53.467645Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\n\nsys.path.append(\"/kaggle/input/ribonanzanet2d-final\")\n\nfrom Network import *\nimport yaml\n\nclass Config:\n    def __init__(self, **entries):\n        self.__dict__.update(entries)\n        self.entries=entries\n\n    def print(self):\n        print(self.entries)\n\ndef load_config_from_yaml(file_path):\n    with open(file_path, 'r') as file:\n        config = yaml.safe_load(file)\n    return Config(**config)","metadata":{"execution":{"iopub.status.busy":"2024-04-25T05:59:53.470865Z","iopub.execute_input":"2024-04-25T05:59:53.47121Z","iopub.status.idle":"2024-04-25T05:59:57.123093Z","shell.execute_reply.started":"2024-04-25T05:59:53.471176Z","shell.execute_reply":"2024-04-25T05:59:57.122319Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=RibonanzaNet(load_config_from_yaml(\"/kaggle/input/ribonanzanet2d-final/configs/pairwise.yaml\")).cuda()","metadata":{"execution":{"iopub.status.busy":"2024-04-25T05:59:57.124137Z","iopub.execute_input":"2024-04-25T05:59:57.124506Z","iopub.status.idle":"2024-04-25T05:59:57.945924Z","shell.execute_reply.started":"2024-04-25T05:59:57.124477Z","shell.execute_reply":"2024-04-25T05:59:57.944947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.load_state_dict(torch.load(\"/kaggle/input/ribonanzanet-weights/RibonanzaNet.pt\",map_location='cpu'))","metadata":{"execution":{"iopub.status.busy":"2024-04-25T05:59:57.946796Z","iopub.status.idle":"2024-04-25T05:59:57.947166Z","shell.execute_reply.started":"2024-04-25T05:59:57.946992Z","shell.execute_reply":"2024-04-25T05:59:57.94701Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Make predictions","metadata":{}},{"cell_type":"code","source":"from tqdm import tqdm\n\ntest_preds=[]\nmodel.eval()\nfor i in tqdm(range(len(test_dataset))):\n    example=test_dataset[i]\n    sequence=example['sequence'].cuda().unsqueeze(0)\n\n    with torch.no_grad():\n        test_preds.append(model(sequence,torch.ones_like(sequence)).squeeze().cpu().numpy())","metadata":{"execution":{"iopub.status.busy":"2024-04-25T05:59:57.94846Z","iopub.status.idle":"2024-04-25T05:59:57.948818Z","shell.execute_reply.started":"2024-04-25T05:59:57.948649Z","shell.execute_reply":"2024-04-25T05:59:57.948666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds[0].shape","metadata":{"execution":{"iopub.status.busy":"2024-04-25T05:59:57.949975Z","iopub.status.idle":"2024-04-25T05:59:57.950256Z","shell.execute_reply.started":"2024-04-25T05:59:57.950115Z","shell.execute_reply":"2024-04-25T05:59:57.95013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# let's take a look at the predictions\nimport matplotlib.pyplot as plt\nplt.plot(test_preds[0][:,0],label='2A3')\nplt.plot(test_preds[0][:,1],label='DMS')\n\nplt.xlabel('position')\nplt.ylabel('reactivity')\nplt.legend()","metadata":{"execution":{"iopub.status.busy":"2024-04-25T05:59:57.951277Z","iopub.status.idle":"2024-04-25T05:59:57.951589Z","shell.execute_reply.started":"2024-04-25T05:59:57.951429Z","shell.execute_reply":"2024-04-25T05:59:57.951443Z"},"trusted":true},"execution_count":null,"outputs":[]}]}