PSP - 蛋白质结构预测 OpenFold Multimer 训练模型的数据加载

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/132597659

OpenFold

OpenFold Multimer 是基于深度学习的方法,预测蛋白质的多聚体结构和相互作用。利用大规模的蛋白质序列和结构数据,以及先进的神经网络架构,来学习蛋白质的表示和特征。可以处理不同类型的多聚体,包括同源和异源多聚体,以及复杂的蛋白质-蛋白质相互作用网络。OpenFold Multimer 的目标是为生物学家提供一个快速、准确和易用的工具,来探索蛋白质的多聚体功能和机制。

训练参数:

python3 train_openfold.py \--train_data_dir [your folder]/af2-data-v230/pdb_mmcif/mmcif_files/ \--train_alignment_dir mydata/alignment_dir/ \--train_mmcif_data_cache_path mmcif_cache.json \--template_mmcif_dir [your folder]/af2-data-v230/pdb_mmcif/mmcif_files/ \--output_dir mydata/output_dir/ \--max_template_date "2021-10-10" \--config_preset "model_1_multimer_v3" \--template_release_dates_cache_path mmcif_cache.json \--precision bf16 \--gpus 1 \--replace_sampler_ddp=True \--seed 42 \--deepspeed_config_path deepspeed_config.json \--checkpoint_every_epoch \--train_chain_data_cache_path chain_data_cache.json \--obsolete_pdbs_file_path [your folder]/af2-data-v230/pdb_mmcif/obsolete.dat

1. train_alignment_dir

核心关注 train_alignment_dir,这部分是缓存的预处理特征,调用路径如下:

  • train_openfold.pyargs 参数,传入 OpenFoldMultimerDataModule
  • 再由 dataset_gen() 方法,也就是 OpenFoldSingleMultimerDataset 类,接收
  • 参数由 alignment_dir=self.train_alignment_dir,转换成 alignment_dir
  • 再由 OpenFoldMultimerDataModule 类,调用 OpenFoldSingleMultimerDataset

# train_openfold.py
# ...
if "multimer" in args.config_preset:data_module = OpenFoldMultimerDataModule(config=config.data,batch_seed=args.seed,**vars(args))
# ...# openfold/data/data_modules.py#OpenFoldMultimerDataModule
# ...
if self.training_mode:train_dataset = dataset_gen(data_dir=self.train_data_dir,mmcif_data_cache_path=self.train_mmcif_data_cache_path,alignment_dir=self.train_alignment_dir,filter_path=self.train_filter_path,max_template_hits=self.config.train.max_template_hits,shuffle_top_k_prefiltered=self.config.train.shuffle_top_k_prefiltered,treat_pdb_as_distillation=False,mode="train",alignment_index=self.alignment_index,)
# ...

OpenFoldSingleMultimerDataset 类中,alignment_dir 用于 _chain_ids 的赋值,即

if alignment_index is not None:self._chain_ids = list(alignment_index.keys())
else:self._chain_ids = list(os.listdir(alignment_dir))

alignment_index_path 支持作为参数,传入,默认是空,相关描述如下,核心是先编译成单个文件,再读入,可以提升效率:

In cases where it may be burdensome to create separate files for each chain’s alignments, alignment directories can be consolidated using the scripts in scripts/alignment_db_scripts/. First, run create_alignment_db.py to consolidate an alignment directory into a pair of database and index files. Once all alignment directories (or shards of a single alignment directory) have been compiled, unify the indices with unify_alignment_db_indices.py. The resulting index, super.index, can be passed to the training script flags containing the phrase alignment_index. In this scenario, the alignment_dir flags instead represent the directory containing the compiled alignment databases. Both the training and distillation datasets can be compiled in this way. Anecdotally, this can speed up training in I/O-bottlenecked environments.

其中,self._chain_ids 是全部的训练集:

def __len__(self):return len(self._chain_ids) 

设置 logger 日志:

import logging
logging.basicConfig()
logger = logging.getLogger(__file__)
logger.setLevel(level=logging.INFO)

训练数据的遍历参数:

def __getitem__(self, idx):mmcif_id = self.idx_to_mmcif_id(idx)chains = self.mmcif_data_cache[mmcif_id]['chain_ids']

根据输出,组织训练数据:

mmcif_id is: 5ykn, idx: 8580 and has 1 chains
mmcif_id is: 2lna, idx: 3848 and has 1 chains
mmcif_id is: 7rrp, idx: 8447 and has 24 chains
mmcif_id is: 6k8h, idx: 7870 and has 2 chains
...

2. OpenFoldSingleMultimerDataset

具体分析 OpenFoldSingleMultimerDataset 类。在 __getitem__ 方法中,遍历训练样本,核心关注:

  • self.idx_to_mmcif_id() 函数调用 self._mmcifs[idx]
  • 2个关键变量,self._mmcifsself.mmcif_data_cache,而且两者的 keys 要保持一致。

即:

def __getitem__(self, idx):mmcif_id = self.idx_to_mmcif_id(idx)chains = self.mmcif_data_cache[mmcif_id]['chain_ids']print(f"mmcif_id is: {mmcif_id}, idx: {idx} and has {len(chains)} chains")

关于 self._mmcifs 数据,调用 mmcif_data_cache_path -> self.mmcif_data_cache -> self._mmcifs

  • mmcif_data_cache_path 来源于预处理的过程

即:

# ...
logger.info(f"[CL] mmcif_data_cache_path: {mmcif_data_cache_path}")
if mmcif_data_cache_path is not None:with open(mmcif_data_cache_path, "r") as infile:self.mmcif_data_cache = json.load(infile)assert isinstance(self.mmcif_data_cache, dict)
# ...
if self.mmcif_data_cache is not None:self._mmcifs = list(self.mmcif_data_cache.keys())self._mmcif_id_to_idx_dict = {mmcif: i for i, mmcif in enumerate(self._mmcifs)}

其中 mmcif_cache.json 的文件数据,包括PDB信息,即:

{"4ewn": {"release_date": "2012-12-05","chain_ids": ["D"],"seqs": ["MLAKRI..."],"no_chains": 1,"resolution": 1.9},"5m9r": {"release_date": "2017-02-22","chain_ids": ["A", "B"],"seqs": ["MQDNS...","MQDNS..."],"no_chains": 2,"resolution": 1.44},
# ...

BugFix: 增加 train_mmcif_data_cache_path 参数

--train_mmcif_data_cache_path mmcif_cache.json

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/94585.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GUI开发】用python爬YouTube博主信息,并开发成exe软件

文章目录 一、背景介绍二、代码讲解2.1 爬虫2.2 tkinter界面2.3 存日志 三、软件演示视频四、说明 一、背景介绍 你好,我是马哥python说,一名10年程序猿。 最近我用python开发了一个GUI桌面软件,目的是爬取相关YouTube博主的各种信息&#…

腾讯云网站备案详细流程_审核时间说明

腾讯云网站备案流程先填写基础信息、主体信息和网站信息,然后提交备案后等待腾讯云初审,初审通过后进行短信核验,最后等待各省管局审核,前面腾讯云初审时间1到2天左右,最长时间是等待管局审核时间,网站备案…

Python Opencv实践 - 凸包检测(ConvexHull)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.png") plt.imshow(img[:,:,::-1])img_contour img.copy() #得到灰度图做Canny边缘检测 img_gray cv.cvtColor(img_contour, cv.COLOR_BGR2GRAY) edges…

手写RPC框架--2.介绍Zookeeper

RPC框架-Gitee代码(麻烦点个Starred, 支持一下吧) RPC框架-GitHub代码(麻烦点个Starred, 支持一下吧) 该项目的RPC通信将采用NettyZookeeper,所以会在前两章介绍使用方法 介绍Zookeeper Zookeepera.概述1) 数据模型2) Watcher机制 b.安装和基本操作1) Java操作zooke…

前端Vue仿企查查 天眼查知识产权标准信息列表组件

引入Vue仿企查查天眼查知识产权标准信息列表组件 随着技术的不断发展,传统的开发方式使得系统的复杂度越来越高。在传统开发过程中,一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改,造成牵一发而动全身的情况。为了解决这个问题…

C# Solidworks二次开发:创建距离配合以及移动组件API详解

今天要讲的文章是关于如何创建距离配合和移动组件的API详解。 (1)创建配合API,CreateMate() 这个API的解释是根据指定的特性数据对象来创建配合,也就可以理解为输入什么样的特征对象就可以创建出什么配合,这个API的输…

async的用法

有以下几种形式 //从c11到c17有 template< class Function, class... Args > std::future<typename std::result_of<typename std::decay<Function>::type(typename std::decay<Args>::type...)>::type>async( Function&& f, Args&…

VBA:对Excel单元格进行合并操作

Sub hb()Dim nn 3For i 3 To 18If Range("b" & i) <> Range("b" & i 1) ThenRange("b" & n & ":b" & i).Mergen i 1End IfNextEnd Sub

JavaScript -【第一周】

文章来源于网上收集和自己原创&#xff0c;若侵害到您的权利&#xff0c;请您及时联系并删除~~~ JavaScript 介绍 变量、常量、数据类型、运算符等基础概念 能够实现数据类型的转换&#xff0c;结合四则运算体会如何编程。 体会现实世界中的事物与计算机的关系理解什么是数据并…

SpringCloudGateway集成SpringDoc

SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级&#xff0c;按客户要求升级Spring版本&#xff0c;原来用着SpringBoot 2.2.X版本&#xff0c;只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求&#xff0c;可是好像最新的SpringBoot 2.X貌似也不…

Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)

Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN) 来源&#xff1a; KDD’2023Google Research 文章目录 Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)长尾问题分析CDNItem Memorization and General…

【C++】SLT——Vector详解

本片要分享的是关于STL中Vector的内容&#xff0c;Vector的内容于string非常相似&#xff0c;只要会使用string那么学习Vector时会非常流畅。 目录 1.vector介绍 2.vector的简单实用 2.1.简单的无参构造 ​编辑2.2.简单带参构造 2.3.迭代器区间初始化 2.4.vector的遍历 …