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

news2024/11/15 19:59:54

欢迎关注我的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.coloradmin.cn/o/958289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 顶点vertices,uv,与图片贴图,与mesh

mesh就是组成3d物体的三角形们。 mesh由顶点组成的三角形组成,三角形的大小 并不 需要一样,由顶点之间的位置决定。 mesh可以是一个或者多个面。 贴图的原点在左下角,uv是贴图的坐标,数量和顶点数一样(不是100%确定…

Unity MonoBehaviour事件函数的生命周期

Unity运行时候的默认的几个函数的执行顺序: 首先是Awake,OnEnable,Start等,后面是FixUpdate Update 最后是OnDisable、OnDestroy

《CTFshow-Web入门》09. Web 81~90

Web 入门 索引web81题解 web82题解原理 web83题解 web84题解 web85题解 web86题解 web87题解原理 web88题解 web89题解 web90题解 ctf - web入门 索引 web81:include() 利用,一句话木马之 Nginx 日志利用。web82~86:include() 利用&#xff…

pyqt5的 Qprogressbar 如何设计得好看一些?

参考官网内容 style 自定义: https://doc.qt.io/qtforpython-5/overviews/stylesheet-examples.html#customizing-qprogressbar 1.圆角,浅蓝色 QProgressBar {border: 2px solid grey;border-radius: 5px; }QProgressBar::chunk {background-color: #0…

Halo2、Caulk+、Baloo、Cq Lookup argument细览

1. 引言 本文主要参考2023年2月以太坊基金会Mary Maller在第13届 BIU Winter School on Cryptography上的视频分享 A Close Look at a Lookup Argument - Mary Maller。 以证明 0 ≤ x < 4 0\leq x <4 0≤x<4为例&#xff0c;相比于使用算术化电路中如何使用定制gat…

免费s5爬虫ip:真正靠谱还是泡沫?

在网络世界中&#xff0c;许多人寻找免费的s5爬虫ip以实现匿名上网和绕过地域限制。然而&#xff0c;关于这些免费服务的可信度一直存在争议。本文将探讨免费s5爬虫ip背后的真相&#xff0c;并帮助您判断它们到底是值得依赖还是只不过虚幻泡沫。 1、充斥着风险 大部分提供免费…

不平衡的数据集将如何影响模型的性能?示例说明

一、说明 朋友们&#xff0c;您可能听说过&#xff0c;在不平衡数据集上训练的模型可能会受到泛化不佳和少数类检测减少的影响。在接下来的几篇文章中&#xff0c;我将给你一个例子来展示不平衡的数据集如何影响模型的性能&#xff0c;以及我们如何处理这个问题。在这篇文章中&…

【pdf密码】忘记了密码该如何编辑PDF文件?

PDF文件设置了密码&#xff0c;无法编辑PDF文件&#xff0c;如果忘记了PDF密码&#xff0c;无法取消限制编辑&#xff0c;那么这种情况&#xff0c;我们该如何解决&#xff1f;分享两个方法。 方法一&#xff1a; 将PDF文件转换为其他格式&#xff0c;这里&#xff0c;我们可…

Navicat:解决导入csv文件中文乱码的问题

文章目录 1 问题描述2 解决方案 1 问题描述 导入时编码格式默认选择UTF-8 后面发现源字段中文显示乱码 2 解决方案 用记事本txt格式打开csv文件&#xff0c;查看右下角编码格式是否为UTF-8 一般通过xls另存的csv&#xff0c;编码格式为ANSI&#xff0c;需要转换为UTF-8 转…

解决小程序中textarea ios端样式不兼容的方法

问题描述 &#xff0c;今天在调试小程序的时候有个需求需要textarea与标题对其&#xff0c;微信开发工具和安卓系统都没有问题 但是ios系统textarea存在内边距。出现不兼容的情况 解决方法&#xff1a;我们看官网的textarea的属性 textarea | uni-app官网 disable-default-p…

插座上亚马逊美国站UL1449测试报告标准

美规插座有UL498&#xff1b;UL1363&#xff1b;UL1449等标准。不同结构&#xff1b;不同形式使用的标准不同。UL498插座部分主要是对结构和常规性测试的要求&#xff1b;此类插座称为Receptacle&#xff1b;UL1363主要是对室内用的延长线插座的要求&#xff1b;此类插座常简写…

基于ssm+vue舞蹈网站的设计与实现

基于ssmvue舞蹈网站的设计与实现111 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技…

开发指导—利用CSS动画实现HarmonyOS动效(一)

注&#xff1a;本文内容分享转载自 HarmonyOS Developer 官网文档 一. CSS 语法参考 CSS 是描述 HML 页面结构的样式语言。所有组件均存在系统默认样式&#xff0c;也可在页面 CSS 样式文件中对组件、页面自定义不同的样式。请参考通用样式了解兼容 JS 的类 Web 开发范式支持的…

易基因:De novo组装和转录组表征:东方田鼠原发性卵巢癌机制新见解|项目文章

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年&#xff0c;中南大学湘雅医学院周智君教授团队在Mol Med Rep发表了题为" De novo assembly and transcriptome characterization: Novel insights into the mechanisms of p…

PDF转成翻页的电子图册?或许这样做你也可以

PDF转成翻页的电子图册是一种很有趣的方式&#xff0c;可以让读者像翻阅实体书一样浏览电子文档。这种形式的电子图册可以通过将PDF文件转换为HTML5格式来实现翻页效果。这样做的好处是可以增加用户的阅读体验&#xff0c;使阅读更加生动有趣。 如果你也想转换成翻页的电子图册…

首批!八家大模型企业面向全民开放

Datawhale干货 开放&#xff1a;国产大模型&#xff0c;编辑&#xff1a;司玉鑫 前 言 在科技领域&#xff0c;一项重要的消息引起了广泛关注&#xff1a; 8月31日凌晨&#xff0c;首批大模型产品终于获得了正式批准。这一消息不仅令行业内的巨头企业欢欣鼓舞&#xff0c;也使…

探索隧道ip如何助力爬虫应用

在数据驱动的世界中&#xff0c;网络爬虫已成为获取大量信息的重要工具。然而&#xff0c;爬虫在抓取数据时可能会遇到一些挑战&#xff0c;如IP封禁、访问限制等。隧道ip&#xff08;TunnelingProxy&#xff09;作为一种强大的解决方案&#xff0c;可以帮助爬虫应用更高效地获…

什么是malloxx勒索病毒,服务器中malloxx勒索病毒了怎么办?

Malloxx勒索病毒是一种新型的电脑病毒&#xff0c;它通过加密用户电脑中的重要文件数据来威胁用户&#xff0c;并以此勒索钱财。这种病毒并不是让用户的电脑瘫痪&#xff0c;而是以非常独特的方式进行攻击。在感染了Malloxx勒索病毒后&#xff0c;它会加密用户服务器中的数据&a…

使用(七牛云)为例子实现将文件上传到云服务器

目的 目前&#xff0c;用户的头像、分享生成的长图等文件都是存放在本地的&#xff0c;我们可以将他们存放在云服务器中&#xff0c;此处我们使用七牛云作为例子示范。 七牛云 创建账户并申请如下的两个bucket&#xff0c;分别是用户头像的存储空间和分享长图的存储空间。 …

浅谈电能计量管理系统在煤矿上的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;随着煤矿供电系统管、控一体化的发展需要&#xff0c;本文提出了一种基于矿井光纤网络构成的煤矿电参数计量系统&#xff0c;该系统具有实现变电所各类开关、动力设备的用电高精度计量&#xff1b;远程实时监…