RoseTTAFold QueryEncoding类解读

news/2024/11/14 14:03:45/

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.ppmy.cn/news/1546944.html

相关文章

JavaScript代理實現Web開發和安全流覽

在Web 開發中,JavaScript代理(JS 代理)是指一種允許開發人員攔截和重新定義對對象執行的操作的機制。JavaScript 代理充當對象的包裝器,攔截某些操作(如屬性訪問、方法調用等),開發人員可以控制…

2020年美国总统大选数据分析与模型预测

数据集取自:2020年🇺🇸🇺🇸美国大选数据集 - Heywhale.com 前言 对2020年美国总统大选数据的深入分析,提供各州和县层面的投票情况及选民行为的可视化展示。数据预处理阶段将涉及对异常值的处理&#xff0…

有了Makefile, CMake存在的意义是什么?如何借助Makefile构建ObjC语言编译环境?如何获取编译器的版本号?

有了Makefile, CMake存在的意义是什么? Makefile规定了编译脚本的基本长相,但随着跨平台需求越来越大,一份Makefile想要跨平台给Windows/Linux/Mac等等平台越来越难,需要维护的工作量越来越大。CMake定义了makefile中跨平台需要的公用组成&a…

安卓APP又可以在电脑上运行了:微软和鹅厂合作,Windows上运行安卓APP!

手机App如何才能在PC端使用?想必这个问题曾困扰过部分用户,基于操作系统差异和应用开发的兼容性等问题,要实现这个愿望看似遥不可及,好在技术的发展也带来了一些互通解决方案,比如在 PC 端安装安卓模拟器。用户只需下载…

opencv(c++)图像的灰度转换

opencv(c)图像的灰度转换 quickopencv.h #pragma once #include <opencv2/opencv.hpp> using namespace cv; class QuickDemo { public:void colorSpace_Demo(Mat& image); };quickopencv.cpp #include "quickopencv.h"// QuickDemo类中的颜色空间演示函…

Python 连接 Redis 进行增删改查(CRUD)操作

文章目录 Python 连接 Redis 进行增删改查&#xff08;CRUD&#xff09;操作介绍安装 redis-py连接 Redis增加&#xff08;Create&#xff09;查询&#xff08;Read&#xff09;更新&#xff08;Update&#xff09;删除&#xff08;Delete&#xff09;其他常用操作检查键是否存…

MySQL数据库常用命令大全(完整版——表格形式)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

C语言 | Leetcode C语言题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; const int MOD 1000000007;struct Matrix {long mat[6][6];int row, col; };struct Matrix multiply(struct Matrix a, struct Matrix b) {int rows a.row, columns b.col, temp b.row;struct Matrix c;memset(c.mat, 0, sizeof(c.mat)…