RoseTTAFold QueryEncoding类解读

QueryEncoding 类用于在输入张量 x 上添加一种查询序列的特殊编码。这里的查询编码将第一个序列标记为查询序列,并将其与其他序列区分开。以下是代码中的细节和每一步的作用。

源码:

class QueryEncoding(nn.Module):def __init__(self, d_model):super(QueryEncoding, self).__init__()self.pe = nn.Embedding(2, d_model) # (0 for query, 1 for others)def forward(self, x):B, N, L, K = x.shapeidx = torch.ones((B, N, L), device=x.device).long()idx[:,0,:] = 0 # first sequence is the queryx = x + self.pe(idx)return x 

代码解读:

class QueryEncoding(nn.Module):def __init__(self, d_model):super(QueryEncoding, self).__init__()self.pe = nn.Embedding(2, d_model) # (0 for query, 1 for others)def forward(self, x):B, N, L, K = x.shapeidx = torch.ones((B, N, L), device=x.device).long()idx[:,0,:] = 0 # first sequence is the queryx = x + self.pe(idx)return x

参数说明

  • d_model:每个嵌入向量的维度,表示在编码中要用的特征数量。
  • x:输入张量,维度为 (B, N, L, K),其中:
    • B 表示 batch 大小,
    • N 表示多序列对齐(MSA)中的序列数(其中第一个序列通常是查询序列),
    • L 表示序列长度,
    • K 表示特征维度(应与 d_model 相同)。

初始化部分

self.pe = nn.Embedding(2, d_model) # (0 for query, 1 for others)
  • nn.Embedding(2, d_model) 创建了一个大小为 (2, d_model) 的嵌入矩阵。该矩阵有两行,每一行是 d_model 维度的向量:
    • 行 0:为查询序列准备的编码向量,
    • 行 1:为其他序列准备的编码向量。
  • 该嵌入矩阵可以根据输入中的序列类型(查询或非查询)来生成不同的嵌入。

forward 方法解析

1. idx 索引张量的创建
B, N, L, K = x.shape
idx = torch.ones((B, N, L), device=x.device).long()
idx[:,0,:] = 0 # first sequence is the query
  • idx 是一个张量,形状为 (B, N, L),用于标记序列类型:
    • 初始时,idx 中的值全为 1,即所有位置都默认被标记为非查询序列。
    • idx[:, 0, :] = 0 将第一个序列的所有位置标记为查询序列,所有 batch 中的第一个序列都是查询序列。
2. 生成嵌入并相加
x = x + self.pe(idx)
  • self.pe(idx) 会为 idx 中的每个值生成对应的嵌入向量。
    • 如果 idx 的某个位置是 0,则生成查询编码(第 0 行的嵌入向量),
    • 如果 idx 的某个位置是 1,则生成非查询编码(第 1 行的嵌入向量)。
  • self.pe(idx) 的形状与 x 相同,为 (B, N, L, d_model)
  • x + self.pe(idx):将生成的查询或非查询嵌入向量添加到输入张量 x 上,增加了序列的查询信息。
3. 返回带查询编码的信息

最终的 x(维度 (B, N, L, d_model))包含了查询序列和其他序列的特殊编码信息。这种编码有助于模型区分查询序列和其他对齐序列,从而根据查询序列的特征信息做出预测或聚合。

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

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

相关文章

计算机网络学习笔记-3.2介质访问控制

文章目录 介质访问控制静态划分信道 动态分配信道轮询访问介质访问控制随机访问介质访问控制ALOHA协议简介ALOHA协议的工作原理 介质访问控制 介质访问控制(MAC,Medium Access Control),质访问控制的目的是确保多个设备能够高效、…

软件测试-巨量测试开发

软件测试-巨量测试 编辑时间:2024/11/13 软件测试基础知识 软件测试定义和测试分类 软件是计算机程序、程序所用的数据以及有关文档资料的集合。 软件测试分类 按测试执行阶段划分 单元测试、集成测试、系统测试、验收测试 是否运行程序划分 动态测试、静态测试…

pycharm中from[本地包]import文件/模块出现问题(最最最全方法!)

1.通过PYTHONPATH的方法在此处将路径添加上,能够让IDE访问得到。 2.通过选中目标文件所在的文件的文件夹单击右键,如下图所示可以看到下方的mark directory as选项中存在 存在excluded,选择此项可解决问题,如果仍有问题可以尝试其…

【日志】Unity——Roll-A-Ball(二)

2024.11.13 【Unity】 3.搭建游戏场景 4.设置可拾取物品 4.1设置可拾取方块 给予一定的变化和颜色 编写方块旋转脚本Rotator.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class Rotator : MonoBehaviour {// Update is cal…

机器学习(1)线性回归

前言   线性回归算法是机器学习深度学习入门的必学的算法,其算法原理虽然简单,但是却蕴含着机器学习中的一些重要的基本思想。许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。同时机器学习深度学习的核心思想就是优…

CSS:导航栏三角箭头

用CSS实现导航流程图的样式。可根据自己的需求进行修改,代码精略的写了一下。 注:场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅,自行处理。有个方法是直接在每个外面包一个DIV,用动态样式设置底色。 场景一、…

Redis设计与实现 学习笔记 第十七章 集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding,水平切分)来进行数据共享,并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点(node)组成,在刚开…

(11)(2.1.7) FETtec OneWire ESCs(二)

文章目录 前言 3 组态 4 可选功能 5 SITL模拟 6 故障排除 前言 !Note 此功能在固件版本4.1.1及更高版本上可用。 3 组态 FTW掩码 SERVO_FTW_MASK 参数选择将哪些伺服输出(如果有的话)路由到 FETtec ESC。更改此参数后需要重新启动。…

Python Bokeh 数据可视化教程

Python Bokeh 数据可视化教程 引言 在数据科学和分析的过程中,数据可视化是一个至关重要的环节。它不仅能帮助我们更好地理解数据,还能在报告和展示中提升数据的可读性和吸引力。Python 作为数据科学的主要工具之一,提供了多种数据可视化库…

(免费领源码)java#SSM#mysql高校就业数据可视化管理系统的设计与实现81461-计算机毕设 原创

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校就业管理等问题,对高校就业…

wordcloud库基本介绍

文章目录 wordcloud库概述wordcloud库的安装 wordcloud库使用说明配置对象参数 wordcloud应用实例实例: 政府工作报告词云 wordcloud库概述 wordcloud是优秀的词云展示第三方库 词云以词语为基本单位,更加直观和艺术地展示文本 wordcloud库的安装 (cmd命令行) pip install …

替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维

时序数据库 IoTDB 应用于宝武集团全基地钢铁时序数据管理,激活数据资产,赋能大型设备智能运维。 1. 背景概述 宝武装备智能科技有限公司(以下简称:宝武智维)是中国宝武设备智能运维专业化平台公司,30 余年始…

面试_ABtest原理简介

01 什么是ABtest ABtest来源于假设检验,现有两个随机均匀的有样本组A、B,对其中一个组A做出某种改动,实验结束后分析两组用户行为数据,通过显著性检验,判断这个改动对于我们所关注的核心指标是否有显著的影响&#xf…

Anolis8.2系统中搭建python环境

文章目录 安装依赖项依赖项介绍 下载python源码包安装python源码包 安装依赖项 [rootPython ~]# dnf install -y gcc make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel xz-devel libffi-devel uuid-devel libnsl2-d…

Gurobi学术版+Anaconda安装步骤

注意:在anaconda虚拟环境中安装gurobi库是不需要在本地下载gurobi这个软件的,只需要conda install gurobi即可,或者指定版本的安装conda install -c gurobi gurobi11.0.3。 step0:安装ananconda step1:获得学术许可&a…

OBOO鸥柏:旗下户外景区自助触摸查询一体机已布局智慧城市便民

OBOO鸥柏作为户外自助查询一体机制造商品牌源头工厂一体化,鸥柏室外液晶广告屏凭借其独特的展览展示交互式查询互动优势,OBOO鸥柏正逐渐成为城市公共服务与商业信息查询的商用及工业液晶显示终端机新标杆。基于智慧城市便民化布局主要体现于以下几点&…

Mysql每日一题(分组+select嵌套查询)

本题我通过自己的努力,利用多个知识点,完成了本题,目前还没有查看题解,一会会给出别人题解的方法,自己写的代码就很很繁琐很麻烦,如果是大佬,可能知道这一题就直接这个窗口函数加这个窗口函数就…

Java并发篇--线程池

线程池 为什么要创建线程池 因为CPU核心数量有限,如果每来一个任务就创建一个线程,就会使线程数远远多于CPU核心数,使线程上下文切换过于频繁,会导致系统性能降低。而且每创建一个线程都会占用一定的内存,如果每来一个任务就创建一个线程,内存消耗太大了。 ThreadPoolExecuto…

ubontu--cuDNN安装

1. 下载 cuDNN https://developer.nvidia.com/cudnn 2. 拷贝到服务器/home/<username>文件夹下 解压缩到当前文件夹&#xff1a; tar -xvf cudnn-linux-x86_64-9.5.1.17_cuda11-archive.tar.xz复制头文件和库文件到cuda安装目录/usr/local/cuda/ sudo cp /home/usern…

Mac终端使用brew命令报错:zsh: command not found: brew

当在终端中出现 zsh: command not found: brew 这个错误时&#xff0c;可能是因为 Homebrew 没有被正确安装&#xff0c;或者它的路径没有被添加到环境变量中。 1. 检查 Homebrew 是否已安装&#xff1a; 打开终端&#xff0c;运行以下命令来检查 Homebrew 是否已安装&#xf…