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.rhkb.cn/news/117776.html

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

相关文章

数据结构|栈和队列以及实现

栈和队列 一、栈1.1栈的概念及结构1.2栈的实现 二、队列2.1队列的概念及结构2.2队列的实现 一、栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和数据删除的一端称为栈顶,另一端称为栈…

vue的第2篇 开发环境vscode的安装以及创建项目空间

一 环境的搭建 1.1常见前端开发ide 1.2 安装vs.code 1.下载地址:Visual Studio Code - Code Editing. Redefined 2.进行安装 1.2.1 vscode的中文插件安装 1.在搜索框输入“chinese” 2.安装完成重启,如下变成中文 1.2.2 修改工作区的颜色 选中[浅色]…

HBuilderX修改manifest.json设置,解决跨域问题(CORS、Cross-Origin)

搭建一个前台uniapp,后台springboot的开发环境时,遇到了跨域问题。 console提示错误信息: Access to XMLHttpRequest at http://10.0.180.203/api/cms/getAdList?apId1 from origin http://localhost:8080 has been blocked by CORS policy…

微服务--Gatway:网关

routes: - id:order_route(路由唯一 标识,路由到order) uri:http://localhost:8020 #需要转发的地址 #断言规则(用于路由规则的匹配) predicates: -path/order-serv/** -pathlb://order-service # lb: 使用nacos中的本地…

随机森林算法

介绍 随机森林是一种基于集成学习的有监督机器学习算法。随机森林是包含多个决策树的分类器,一般输出的类别是由决策树的众数决定。随机森林也可以用于常见的回归拟合。随机森林主要是运用了两种思想。具体如下所示。 Breimans的Bootstrap aggregatingHo的random …

操作系统清华同步笔记:定义概述+计算机内存和硬盘布局+启动流程顺序+中断、异常和系统调用

定义概述 从用户角度来看,操作系统是一个控制软件,用以管理应用程序,为应用程序提供服务,杀死应用程序等。从内部文件角度来看,操作系统是一个资源管理器,用以管理外设,分配资源。层次结构&…

MySQL内容及原理记录

原理篇 架构、索引、事务、锁、日志、性能调优 高可用 读写分离、分库分表、分布式ID、高可用、分布式数据库、分布式事务、分布式锁 架构 1 执行一条 SQL 查询语句,期间发生了什么? (1)连接器:客户端通过连接器…

uniapp 支持图片放大

<view class"list" v-for"(item, index) in urls" :key"index"><image :src"item" click"viewImg(item, index)" disabled></image></view> js // 预览大图 viewImg(data, index) {uni.previewImag…

【Three.js + Vue 构建三维地球-Part One】

Three.js Vue 构建三维地球-Part One Vue 初始化部分Vue-cli 安装初始化 Vue 项目调整目录结构 Three.js 简介Three.js 安装与开始使用 实习的第一个任务是完成一个三维地球的首屏搭建&#xff0c;看了很多的案例&#xff0c;也尝试了用 Echarts 3D地球的模型进行构建&#xf…

苍穹外卖01-项目概述、环境搭建

项目概述、环境搭建 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; 管理端-外卖商家使用用户端-点餐用户使用当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名软…

【单片机】UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-WIRE、Ethernet等常见通信方式

在单片机开发中&#xff0c;UART、I2C、RS485等普遍在用&#xff0c;这里做一个简单的介绍 UART通用异步收发器 UART口指的是一种物理接口形式(硬件)。 UART是异步&#xff08;指不使用时钟同步&#xff0c;依靠帧长进行判断&#xff09;&#xff0c;全双工&#xff08;收发…

Linux:编译遇到 Please port gnulib freadahead.c to your platform ,怎么破

问题背景 编译m4时遇到以下错误&#xff0c;该怎么解决呢&#xff1f; 解决方法 进入m4的build目录&#xff1a;build/host-m4-1.4.17 输入命令&#xff1a; sed -i s/IO_ftrylockfile/IO_EOF_SEEN/ lib/*.c echo "#define _IO_IN_BACKUP 0x100" >> lib/std…

长城网络靶场,第一题笔记

黑客使用了哪款扫描工具对论坛进行了扫描&#xff1f;&#xff08;小写简称&#xff09; 第一关&#xff0c;第三小题的答案是awvs 思路是先统计查询 然后过滤ip检查流量 过滤语句&#xff1a;tcp and ip.addr ip 114.240179.133没有 第二个101.36.79.67 之后找到了一个…

Lua学习(一)

lua基础学习 LUA 语言1. 什么是lua&#xff1f;1.1 准备工作 2. 基本语法2.1 注释2.2 标识符2.3 关键字2.4 全局变量 3. 数据类型4. 变量4.1 赋值语句 5. 循环5.1 while循环5.2 for循环5.3泛型for循环5.4 repeat until 循环5.5 break 语句 6. 流程控制6.1 if语句6.2 if else 语…

【React】React学习:从初级到高级(三)

3 状态管理 随着应用不断变大&#xff0c;应该更有意识的去关注应用状态如何组织&#xff0c;以及数据如何在组件之间流动。冗余或重复的状态往往是缺陷的根源。 3.1 用State响应输入 3.1.1 声明式地考虑UI 总体步骤如下&#xff1a; 定位组件中不同的视图状态 确定是什么…

程序员工作技巧

提高工作技巧的秘方 案例 让我们猜测一下 绵羊想表达的什么&#xff1f; 并不够准确 崩了&#xff0c;不能用了整个业务瘫痪了研发没有责任感 语义规则/模棱俩可 相对语言 量化数据表达&#xff1a;疼苦指数&#xff0c;拥堵指数&#xff0c;准确。 尽量减少标签化评价 标签…

STM32的HAL库的定时器使用

用HAL库老是忘记了定时器中断怎么配置&#xff0c;该调用哪个回调函数。今天记录一下&#xff0c;下次再忘了就来翻一下。 系统的时钟配置&#xff0c;定时器的时钟是84MHz 这里定时器时钟是84M&#xff0c;分频是8400后&#xff0c;时基就是1/10000s&#xff0c;即0.1ms。Per…

嵌入式学习笔记(10)mkv210_image.c代码详解

第1步&#xff1a;检验用户传参是不是3个。 第2步&#xff1a;分配16KB buffer并且填充为0. 第3步&#xff1a;打开源bin&#xff08;led.bin&#xff09;&#xff0c;判断bin长度是否不大于16KB-16Bytes 第4步&#xff1a;以16个字符串填充0~15这16个Bytes 第5步&#xff…

Windows Network File System Remote Code Execution Vulnerability

文章目录 NFS(Network File System)漏洞描述攻击者如何利用此漏洞&#xff1f;该漏洞的危险程度机密性-high真实性-high可用性-high 如何降低漏洞风险推荐阅读 NFS(Network File System)漏洞描述 Name Microsoft Windows Network File System Remote Code Execution Vulnerabi…

verilator——牛刀小试

verilator——牛刀小试 安装verilator可见&#xff1a;https://blog.csdn.net/qq_40676869/article/details/132648522?spm1001.2014.3001.5501 正文开始 编写一个异或的电路模块如下&#xff1a; top.v module top(input a,input b,output f );assign f a ^ b; endmodul…