当前位置: 首页 > news >正文

从0搭建Transformer

首先是位置编码组件:

import torch
import torch.nn as nn
import mathclass PositonalEncoding(nn.Module):def __init__ (self, d_model, dropout, max_len=5000):super(PositionalEncoding, self).__init__()self.dropout = nn.Dropout(p=dropout)# [[1, 2, 3],# [4, 5, 6],# [7, 8, 9]]pe = torch.zeros(max_len, d_model)# [[0],# [1],# [2]]position = torch.arange(0, max_len, dtype = torch.float).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))pe[:, 0::2] = torch.sin(position * div_term)pe[:, 1::2] = torch.cos(position * div_term)pe = pe.unsqueeze(0)# 位置编码固定,不更新参数# 保存模型时会保存缓冲区,在引入模型时缓冲区也被引入self.register_buffer('pe', pe)def forward(self, x):# 不计算梯度x = x + self.pe[:, :x.size(1)].requires_grad_(False)

相关文章:

  • 大学之大:瑞典皇家理工学院2025.5.2
  • 纯原生Java实现:获取整个项目中指定接口所有的实现类
  • 柔性超声耦合剂的选择与设计-可穿戴式柔性超声耦合剂面临的难题
  • [面试]SoC验证工程师面试常见问题(三)
  • 冯·诺依曼体系:现代计算机的底层逻辑与百年传承
  • 深度学习框架PyTorch——从入门到精通(YouTube系列 - 4)——使用PyTorch构建模型
  • 实现水平垂直居中的多种方法
  • 多模态RAG演进-MRAG1.0->MRAG2.0->MRAG3.0
  • 【验证技能】VIP项目大总结
  • C++派生类核心机制:类型转换与对象复制控制深度剖析
  • 通信协议记录仪-产品规格书
  • 如何让通义千问大模型支持结构化输出?
  • 使用xlwings将两张顺序错乱的表格进行数据核对
  • NVIDIA Omniverse在数字孪生中的算力消耗模型构建方法
  • C++ std::initializer_list 详解
  • 为美好的XCPC献上典题 ABC359 G - Sum of Tree Distance(根号分治)
  • 【AI面试准备】传统测试工程师Prompt Engineering转型指南
  • 在 Windows 中安装 Pynini 的记录
  • ECMAScript 2(ES2):标准化的微调与巩固
  • 每天一道算法题——推多米诺
  • 习近平给谢依特小学戍边支教西部计划志愿者服务队队员的回信
  • 本周看啥|《乘风》迎来师姐们,《天赐》王蓉搭Ella
  • 旅游特种兵们,这个五一“躲进”书吧
  • 讲武谈兵|朝鲜“崔贤”号驱逐舰下水,朝版“宙斯盾”战力如何?
  • 5月起,这些新规将施行
  • 200枚篆刻聚焦北京中轴线,“印记”申遗往事