一个 Transformer 训练生成式模型的例子
最近在看chatGPT,想着chatGPT 是怎么训练出来的,不涉及神经网络算法,可以使用Transformer玩一下
import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader # 构造词表 vocab = ["<PAD>", "<BOS>", "<EOS>", "明天", "天气", "很", "好"] word2idx = {w: i for i, w in enumerate(vocab)} idx2word = {i: w for w, i in word2idx.items()} # 示例训练数据:输入和标签都偏移一位 # 输入: <BOS> 明天 天气 很 # 输出: 明天 天气 很 好 inputs = torch.tensor([ [word2idx["<BOS>"], word2idx["明天"], word2idx["天气"], word2idx["很"]] ]) labels = torch.tensor([ [word2idx["明天"], word2idx["天气"], word2idx["很"], word2idx["好"]] ]) class TinyTransformerModel(nn.Module): def __init__(self, vocab_size, d_model=32, nhead=2, num_layers=2): super().__init__() self.embedding = nn.Embedding(vocab_size, d_model) self.pos_encoding = nn.Parameter(torch.randn(1, 100, d_model)) # 最多100个词 encoder_layer = nn.TransformerEncoderLayer(d_model, nhead) self.transformer = nn.TransformerEncoder(encoder_layer, num_layers) self.fc = nn.Linear(d_model, vocab_size) def forward(self, x): x = self.embedding(x) + self.pos_encoding[:, :x.size(1)] x = self.transformer(x) return self.fc(x) model = TinyTransformerModel(vocab_size=len(vocab)) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) loss_fn = nn.CrossEntropyLoss() for epoch in range(50): model.train() out = model(inputs) # [batch_size, seq_len, vocab_size] loss = loss_fn(out.view(-1, len(vocab)), labels.view(-1)) optimizer.zero_grad() loss.backward() optimizer.step() if epoch % 20 == 0: print(f"Epoch {epoch}, loss: {loss.item():.4f}") def generate(model, start_tokens, max_len=5): model.eval() input_ids = torch.tensor([start_tokens]) for _ in range(max_len): with torch.no_grad(): logits = model(input_ids) next_token = logits[0, -1].argmax().item() input_ids = torch.cat([input_ids, torch.tensor([[next_token]])], dim=1) if next_token == word2idx["<EOS>"] or len(input_ids[0]) > max_len: break return [idx2word[i] for i in input_ids[0].tolist()] # 测试 generated = generate(model, [word2idx["<BOS>"]]) print("生成结果:", " ".join(generated))

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Dell Pro Desktop 全新 AI PC 家族,现已上市!
当混合办公成为新常态,企业的设备采购清单开始经历残酷的 "适者生存" 法则——那些传统设备正在被扫地出门,取而代之的是能适配敏捷办公的智能新物种。就在昨天,戴尔科技强势出手,全面升级了Dell Pro DT产品线,从体积仅为1.2L的小清新Dell Pro Micro,到拥有强大算力的Dell Pro Tower,掀起了一场颠覆办公效率的智能革命,重新定义了企业的数字战斗力! 商用台式机首款AI PC Dell Pro DT系列AI PC已于3月27日正式上市,作为全新登场的 “实力派选手”,它传承自全球单一品牌销量第一的OptiPlex商用台式机。凭借着诸多超能力,完美契合现代商业用户五花八门的需求。到底有多厉害?一起来瞧瞧! Dell Pro DT在可靠性方面绝对行业领先,首年平均无故障率高达99%,高效散热设计更是功不可没,即便长时间高负荷运行,也能冷静应对,稳定得不像话。 不仅如此,Dell Pro DT选用的可溯源部件都遵循高标准,从全球一线供应商处精挑细选优质电子元器件,每一个部件都品质过硬。而且,它还通过了军标测试认证,严格的质量控制让它无惧任何恶劣环境,始终稳如泰山,...
- 下一篇
内网 IM 选型逻辑:企业为何青睐自研或外采私有化 IM
在数字化办公与数据安全需求交织的背景下,企业对内网IM(即时通讯)的选择已超越工具层面,成为关乎组织效率、数据主权与合规底线的战略决策。无论是自研还是外采私有化IM,其核心逻辑均围绕“安全可控”“效率适配”“业务融合”三大维度展开,以下从企业实际需求角度剖析深层动因。 一、数据安全:内网IM的生存底线 1.物理隔绝与主权掌控 公有云IM的数据存储与传输依赖第三方服务器,而企业内网IM(自研或私有化部署)通过本地化服务器搭建,将通讯数据完全限定在企业自有局域网内。金融机构、军工企业等对数据主权要求极高的组织,需确保交易信息、研发机密等敏感内容不触碰公网边界,例如某国有银行核心交易部门的内网IM需满足“数据不出园区”的硬性要求,自研或私有化部署是唯一选择。 2.全链路加密与权限细管 自研/私有化IM可根据企业需求定制加密协议(如国密算法SM4),实现消息内容、文件传输、音视频流的全链路动态加密。某涉密科研单位的内网IM自研方案中,聊天消息采用“一消息一密钥”机制,密钥仅在本地局域网生成与销毁;权限管控精细,这是通用IM工具无法提供的定制化安全策略。 3.合规审计与溯源需求 政府、医疗等行业...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音