AlphaFold2初体验

本文介绍了如何在Google Colab环境中使用AlphaFold2进行蛋白质结构预测,包括Google Colab的介绍、代码下载、关键步骤分析和预测结果可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021SC@SDUSC


前言

今天尝试在google colab快速跑通Alphafold2的简易版,进行蛋白质预测初体验


一、Google Colab介绍

  Google Colab是一个免费的 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。并且可以免费使用Google的GPU 。Google Colab可以将你的Jupyter 笔记本存储在Google的云端硬盘当中,借助 Google Colab,可以在云端编写和执行代码、保存和共享分析结果,以及利用强大的计算资源,所有这些都可通过浏览器免费使用。

有关Google colab使用可以参考:
https://zhuanlan.zhihu.com/p/54389036

二、代码地址

  这里用了Sergey Ovchinnikov 提供的“alphafold_single_sequence.ipynb”的代码
代码地址:
https://colab.research.google.com/drive/1PePaHHp1J-L1rufW4_r7v7VpZjYVUbTH#scrollTo=pxALY3Gh_SZj

三、代码分析

(1)先是导入和安装各种库

%%bash
git clone https://github.com/deepmind/alphafold.git
mv alphafold alphafold_
mv alphafold_/alphafold .

上图是克隆一个 Git 仓库到本地,并且切换到,切换到alphafold 目录下


%%bash
wget -qnc https://storage.googleapis.com/alphafold/alphafold_params_2021-07-14.tar
tar -xf alphafold_params_2021-07-14.tar
rm alphafold_params_2021-07-14.tar
mkdir params
mv params_* params/


上图是下载一个alphafold模型,将其解压,再删除原先的压缩包,创建新的目录

%%bash
pip -q install biopython
pip -q install dm-haiku
pip -q install ml-collections
pip -q install mock
pip -q install py3Dmol
from typing import Dict
import os
import mock
import numpy as np
import pickle
import py3Dmol

上面两张图是安装引用各种需要的工具模块

from alphafold.common import protein
from alphafold.data import pipeline
from alphafold.data import templates
from alphafold.model import data
from alphafold.model import config
from alphafold.model import model

上图是从alphafold.common中引入protein,从alphafold.data中引入pipeline、templates,从alphafold.model中引入data、config、model
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)定义一个结构预测函数

def predict_structure(
        fasta_path: str,
        fasta_name: str,
        output_dir_base: str,
        data_pipeline: pipeline.DataPipeline,
        model_runners: Dict[str, model.RunModel],
        random_seed: int):
    """Predicts structure using AlphaFold for the given sequence."""

    output_dir = os.path.join(output_dir_base, fasta_name)
    if not os.path.exists(output_dir): os.makedirs(output_dir)

    msa_output_dir = os.path.join(output_dir, 'msas')
    if not os.path.exists(msa_output_dir): os.makedirs(msa_output_dir)

    # 得到features
    feature_dict = data_pipeline.process(input_fasta_path=fasta_path, msa_output_dir=msa_output_dir)

    # 这里是要运行model.
    for model_name, model_runner in model_runners.items():
        processed_feature_dict = model_runner.process_features(feature_dict, random_seed=random_seed)
        prediction_result = model_runner.predict(processed_feature_dict)
        unrelaxed_protein = protein.from_prediction(processed_feature_dict, prediction_result)
        unrelaxed_pdb_path = os.path.join(output_dir, f'unrelaxed_{model_name}.pdb')

        with open(unrelaxed_pdb_path, 'w') as f:
            f.write(protein.to_pdb(unrelaxed_protein))

其中
fasta_path:预测蛋白质fasta文件的路径
fasta_name:预测蛋白质fasta文件的名字
output_dir_base:保存到的路径

data_pipeline.process(input_fasta_path=fasta_path, msa_output_dir=msa_output_dir)是为了要获取到features

for model_name, model_runner in model_runners.items():是要开始运行model了

(3)组建过程

query_sequence = "GWSTELEKHREELKEFLKKEGITNVEIRIDNGRLEVRVEGGTERLKRFLEELRQKLEKKGYTVDIKIE"

上图是输入待预测氨基酸的序列的地方

 """fake template"""
output_templates_sequence = []
output_confidence_scores = []
templates_all_atom_positions = []
templates_all_atom_masks = []

for _ in query_sequence:
  templates_all_atom_positions.append(
      np.zeros((templates.residue_constants.atom_type_num, 3)))
  templates_all_atom_masks.append(np.zeros(templates.residue_constants.atom_type_num))
  output_templates_sequence.append('-')

  output_confidence_scores.append(-1)
output_templates_sequence = ''.join(output_templates_sequence)
templates_aatype = templates.residue_constants.sequence_to_onehot(output_templates_sequence,
                                                                  templates.residue_constants.HHBLITS_AA_TO_ID)
template_features = {'template_all_atom_positions': np.array(templates_all_atom_positions)[None],
       'template_all_atom_masks': np.array(templates_all_atom_masks)[None],
       'template_sequence': [f'none'.encode()],
       'template_aatype': np.array(templates_aatype)[None],
       'template_confidence_scores': np.array(output_confidence_scores)[None],
       'template_domain_names': [f'none'.encode()],
       'template_release_date': [f'none'.encode()]}
       

 """fake pipeline for testing"""       
data_pipeline_mock = mock.Mock()
data_pipeline_mock.process.return_value = {
    **pipeline.make_sequence_features(sequence=query_sequence,
                                      description="none",
                                      num_res=len(query_sequence)),
    **pipeline.make_msa_features(msas=[[query_sequence]],
                                 deletion_matrices=[[[0]*len(query_sequence)]]),
    **template_features
}


fasta_path = os.path.join('target.fasta')
with open(fasta_path, 'wt') as f:
  f.write(f">A\n{query_sequence}")
fasta_name = 'none'
out_dir = "."

   

在上述代码中出现了pipeline,因为以前没有接触过,所以去学习了一下:

pipeline可以将许多算法模型串联起来,形成一个典型的机器学习问题工作流。
Pipeline处理机制就像是把所有模型塞到一个管子里,然后依次对数据进行处理,得到最终的分类结果,

# 加载model_1,在正式的代码中是有5个model的
model_runners = {}
model_name = "model_1"
model_config = config.model_config(model_name)
model_config.data.eval.num_ensemble = 1
model_params = data.get_model_haiku_params(
    model_name=model_name, data_dir=".")
model_runner = model.RunModel(model_config, model_params)
model_runners[model_name] = model_runner

在上图中只加载了model_1,但alphafold在google colab的代码中是有5个model的

(4)开始运行

predict_structure(
  fasta_path=fasta_path,
  fasta_name=fasta_name,
  output_dir_base=".",
  data_pipeline=data_pipeline_mock,
  model_runners=model_runners,
  random_seed=0)

这里就调用了之前定义的predict_structure函数,进行蛋白质预测

(5)画图展示

p = py3Dmol.view(js='https://3dmol.org/build/3Dmol.js')
p.addModel(open("none/unrelaxed_model_1.pdb", 'r').read(), 'pdb')
p.setStyle({'cartoon': {'color': 'spectrum'}})
p.zoomTo()
p.show()

上图中使用py3Dmol来画图,其中addModel函数是把模型的pdb文件加载进来,setStyle函数是来负责调整最终展示出图片的渲染效果

四、效果展示

在这里插入图片描述

### AlphaFold 的基本概念 AlphaFold 是 DeepMind 开发的一种人工智能系统,旨在解决蛋白质结构预测这一长期存在的科学难题。蛋白质是由氨基酸链组成的复杂分子,在生物体内发挥着至关重要的功能。然而,仅通过基因组序列无法完全理解其功能和工作机制[^3]。 AlphaFold 的核心目标是利用机器学习技术来精确预测蛋白质的三维结构。这不仅有助于揭示蛋白质的功能机制,还能够加速药物开发和其他生命科学研究进程。 --- ### AlphaFold 的工作原理 最初版本的 AlphaFold(即 AlphaFold 1.0)采用了卷积神经网络(CNN),通过对大量已知蛋白质结构的数据集进行训练,从而实现高精度的结构预测。然而,随着研究深入,DeepMind 对该模型进行了全面升级。在后续版本中,原有的 CNN 架构被替换成基于 Transformer 的新架构。这种改进使得模型可以更好地捕捉远程残基之间的关系,进而提升预测准确性[^1]。 具体来说,AlphaFold 使用了一种多尺度方法: 1. **输入数据处理** 输入的是蛋白质的一维氨基酸序列信息。这些序列会被转化为特征向量形式作为初始输入。 2. **注意力机制的应用** 利用 Transformer 中的自注意力机制 (self-attention),AlphaFold 可以动态调整不同位置间的关系权重,重点考虑那些对于整体结构形成具有重要意义的部分。 3. **迭代优化过程** 模型会经历多次前馈计算与梯度下降更新循环,逐步逼近最优解直到收敛为止。 以下是简化版伪代码表示: ```python def alpha_fold(sequence): embeddings = preprocess_sequence(sequence) # 将氨基酸序列转换成嵌入向量 transformer_output = apply_transformer(embeddings) # 应用Transformer层提取特征 predicted_structure = optimize_structure(transformer_output) # 迭代优化得到最终结构 return predicted_structure ``` 值得注意的是,除了上述核心技术外,AlphaFold 还借鉴了许多其他领域的先进成果,比如自然语言处理中的预训练策略等。这也反映了跨学科融合趋势正在深刻影响现代科学技术发展轨迹[^2]。 --- ### AlphaFold 的主要用途 1. **基础科研支持** 预测未知蛋白的立体形状可以帮助科学家们更快地解析各种生命现象背后的机理。 2. **疾病治疗探索** 许多人类疾病的根源都可以追溯到某些特定种类异常形态的蛋白质上;因此如果能提前获知它们正常状态下的样子,则有可能设计出针对性更强的新药。 3. **工业应用潜力** 在农业、能源等多个行业里也存在广泛需求——例如改良作物品种抗病虫害能力或者提高酶催化剂效率等等皆可通过此途径达成目的。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值