html5网站建设加盟公司和企业的区别

web/2025/10/3 22:28:26/文章来源:
html5网站建设加盟,公司和企业的区别,如何建设一个国际化的网站,谁会制作网站在上一篇博客中#xff0c;我介绍了用Tensorflow来重现GPT 1的模型和训练的过程。这次我打算用Pytorch来重现GPT 2的模型并从头进行训练。 GPT 2的模型相比GPT 1的改进并不多#xff0c;主要在以下方面#xff1a; 1. GPT 2把layer normalization放在每个decoder block的前…在上一篇博客中我介绍了用Tensorflow来重现GPT 1的模型和训练的过程。这次我打算用Pytorch来重现GPT 2的模型并从头进行训练。 GPT 2的模型相比GPT 1的改进并不多主要在以下方面 1. GPT 2把layer normalization放在每个decoder block的前面。 2. 最终的decoder block之后额外添加了一个layer normalization。 3. 残差层的参数初始化根据网络深度进行调节 4. 训练集采用了webtext(45GB)而不是之前采用的bookcorpus(5GB) 5. 更深的网络结构最大的模型拥有15亿的参数对比GPT 1是1.2亿的参数 GPT 2有以下四种不同深度的模型架构如图 以下我将用pytorch代码来搭建一个GPT 2的模型以最小的GPT 2为例采用bookcorpus的数据在AutoDL平台的一个40G显存的A100显卡上进行训练看看效果如何。 模型结构 整个模型的结构和GPT 1是基本一致的。 定义一个多头注意力模块如以下代码 class MHA(nn.Module):def __init__(self, d_model, num_heads, attn_pdrop, resid_pdrop):super().__init__()self.d_model d_modelself.num_heads num_headsself.attn_pdrop attn_pdropself.resid_dropout nn.Dropout(resid_pdrop)self.ln nn.Linear(d_model, d_model*3)self.c_proj nn.Linear(d_model, d_model)def forward(self, x):B, T, C x.size()x_qkv self.ln(x)q, k, v x_qkv.split(self.d_model, dim2)q q.view(B, T, self.num_heads, C//self.num_heads).transpose(1, 2)k k.view(B, T, self.num_heads, C//self.num_heads).transpose(1, 2)v v.view(B, T, self.num_heads, C//self.num_heads).transpose(1, 2)y torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_maskNone, dropout_pself.attn_pdrop if self.training else 0, is_causalTrue)y y.transpose(1, 2).contiguous().view(B, T, C)y self.c_proj(y)y self.resid_dropout(y)return y 这个模块接收一个输入数据大小为(batch_size, seq_len, dimension)然后进行一个线性变换层把数据映射为(batch_size, seq_len, dimension*3)的维度这里的dimension*3表示的是qkv这三个值的拼接。接着就把这个数据切分为q,k,v三份然后每份都把维度调整为(batch_size, seq_len, num_head, dimension/num_head)num_head表示这个自注意力模块包含多少个head。最后就可以调用scaled_dot_product_attention进行qk的相似度计算进行缩放之后与v值相乘。Pytorch的这个函数提供了最新的flash attention的实现可以大幅提升计算性能。最后就是对qkv的结果进行一个线性变换映射为一个(batch_size, seq_len, dimension)的向量。 自注意力模块的输出结果将通过一个Feed forward层进行计算代码如下 class FeedForward(nn.Module):def __init__(self, d_model, dff, dropout):super().__init__()self.ln1 nn.Linear(d_model, dff)self.ln2 nn.Linear(dff, d_model)self.dropout nn.Dropout(dropout)self.layernorm nn.LayerNorm(d_model)self.gelu nn.GELU()def forward(self, x):x self.ln1(x)x self.gelu(x)x self.ln2(x)x self.dropout(x)return x 代码很简单就是做了两次线性变换第一次把维度扩充到dimension*4第二次把维度恢复为dimension。 最后定义一个decoder block模块把多头注意力模块和feed forward模块组合起来代码如下 class Block(nn.Module):def __init__(self, d_model, num_heads, dff, attn_pdrop, resid_pdrop, dropout):super().__init__()self.layernorm1 nn.LayerNorm(d_model)self.attn MHA(d_model, num_heads, attn_pdrop, resid_pdrop)self.layernorm2 nn.LayerNorm(d_model)self.ff FeedForward(d_model, dff, dropout)def forward(self, x):x x self.attn(self.layernorm1(x))x x self.ff(self.layernorm2(x))return x 有了decoder block之后GPT 2的模型就是把这些block串起来例如最小的GPT 2的模型结构是定义了12个decoder block。模型接收的是字符序列经过tokenizer之后的数字然后把这些数字通过embedding层映射为向量表达例如对每个token id映射为784维度的一个向量。为了能在embedding的向量里面反映字符的位置信息我们需要把字符的位置也做一个embedding然后两个embedding相加。 输入数据经过embedding处理后通过多个decoder block处理之后数据的维度为(batch_size, seq_len, dimension), 我们需要通过一个权重维度为(dimension, vocab_size)的线性变换把数据映射为(batch_size, seq_len, vocab_size)的维度。这里vocab_size表示tokenizer的单词表的长度例如对于GPT 2所用的tokenizer有50257个单词。对于输出数据进行softmax计算之后我们就可以得到每个token的预测概率从而可以和label数据即真实的下一个token id进行比较计算loss值。 GPT 2模型的代码如下 class GPT2(nn.Module):def __init__(self, vocab_size, d_model, block_size, embed_pdrop, num_heads, dff, attn_pdrop, resid_pdrop, dropout, num_layer):super().__init__()self.token_embed nn.Embedding(vocab_size, d_model, sparseFalse)self.pos_embed nn.Embedding(block_size, d_model, sparseFalse)self.dropout_embed nn.Dropout(embed_pdrop)#self.blocks [Block(d_model, num_heads, dff, attn_pdrop, resid_pdrop, dropout) for _ in range(num_layer)]self.blocks nn.ModuleList([Block(d_model, num_heads, dff, attn_pdrop, resid_pdrop, dropout) for _ in range(num_layer)])self.num_layer num_layerself.block_size block_sizeself.lm_head nn.Linear(d_model, vocab_size, biasFalse)self.token_embed.weight self.lm_head.weightself.layernorm nn.LayerNorm(d_model)self.apply(self._init_weights)# apply special scaled init to the residual projections, per GPT-2 paperfor pn, p in self.named_parameters():if pn.endswith(c_proj.weight):torch.nn.init.normal_(p, mean0.0, std0.02/math.sqrt(2 * num_layer))def _init_weights(self, module):if isinstance(module, nn.Linear):torch.nn.init.normal_(module.weight, mean0.0, std0.02)if module.bias is not None:torch.nn.init.zeros_(module.bias)elif isinstance(module, nn.Embedding):torch.nn.init.normal_(module.weight, mean0.0, std0.02)def forward(self, x, targetsNone):device x.deviceb, t x.size()pos torch.arange(0, t, dtypetorch.long, devicedevice) x self.token_embed(x) self.pos_embed(pos)x self.dropout_embed(x)for block in self.blocks:x block(x)x self.layernorm(x)if targets is not None:logits self.lm_head(x)loss F.cross_entropy(logits.view(-1, logits.size(-1)), targets.view(-1), ignore_index-1)else:logits self.lm_head(x[:, -1, :])loss Nonereturn logits, lossdef configure_optimizers(self, weight_decay, learning_rate, betas, device_type):# start with all of the candidate parametersparam_dict {pn: p for pn, p in self.named_parameters()}# filter out those that do not require gradparam_dict {pn: p for pn, p in param_dict.items() if p.requires_grad}# create optim groups. Any parameters that is 2D will be weight decayed, otherwise no.# i.e. all weight tensors in matmuls embeddings decay, all biases and layernorms dont.decay_params [p for n, p in param_dict.items() if p.dim() 2]nodecay_params [p for n, p in param_dict.items() if p.dim() 2]optim_groups [{params: decay_params, weight_decay: weight_decay},{params: nodecay_params, weight_decay: 0.0}]num_decay_params sum(p.numel() for p in decay_params)num_nodecay_params sum(p.numel() for p in nodecay_params)print(fnum decayed parameter tensors: {len(decay_params)}, with {num_decay_params:,} parameters)print(fnum non-decayed parameter tensors: {len(nodecay_params)}, with {num_nodecay_params:,} parameters)# Create AdamW optimizer and use the fused version if it is availablefused_available fused in inspect.signature(torch.optim.AdamW).parametersuse_fused fused_available and device_type cudaextra_args dict(fusedTrue) if use_fused else dict()optimizer torch.optim.AdamW(optim_groups, lrlearning_rate, betasbetas, **extra_args)print(fusing fused AdamW: {use_fused})return optimizertorch.no_grad()def generate(self, idx, max_new_tokens, temperature1.0, top_kNone, block_size512):for _ in range(max_new_tokens):# if the sequence context is growing too long we must crop it at block_sizeidx_cond idx if idx.size(1) block_size else idx[:, -block_size:]# forward the model to get the logits for the index in the sequencelogits, _ self(idx_cond)# pluck the logits at the final step and scale by desired temperaturelogits logits / temperature# optionally crop the logits to only the top k optionsif top_k is not None:v, _ torch.topk(logits, min(top_k, logits.size(-1)))logits[logits v[:, [-1]]] -float(Inf)# apply softmax to convert logits to (normalized) probabilitiesprobs F.softmax(logits, dim-1)# sample from the distributionidx_next torch.multinomial(probs, num_samples1)# append sampled index to the running sequence and continueidx torch.cat((idx, idx_next), dim1)return idx 模型训练 定义好模型之后我们就可以开始训练了。 首先我们需要准备训练数据集。GPT 2采用的是webtext网上的一些公开网页数据来进行训练。在Huggingface上面有对应的一个公开数据集。不过考虑到我们的资源有限我这次还是采用GPT 1所用的bookcorpus数据集来训练。 以下代码是下载huggingface的数据集并用GPT 2的tokenizer来进行编码 from datasets import load_dataset from transformers import GPT2Tokenizerdataset load_dataset(bookcorpusopen, splittrain)block_size513 tokenizer GPT2Tokenizer.from_pretrained(gpt2)def tokenize_function(examples):token_ids [tokenizer(text) for text in examples[text]]total_length [len(t[input_ids]) for t in token_ids]total_length [(l//(block_size1))*(block_size1) for l in total_length]result []label []for i in range(len(total_length)):result.extend([token_ids[i][input_ids][j:jblock_size1] for j in range(0, total_length[i], block_size1)])return {token_ids: result}ds_test ds[train].select(range(10000))tokenized_datasets ds_test.map(tokenize_function, batchedTrue, num_proc8, remove_columns[title, text], batch_size100 )tokenized_datasets.save_to_disk(data/boocorpusopen_10000_512tokens) GPT1采用的bookcorpus有7000多本书huggingface的bookcorpusopen数据集有14000多本这里我只采用了10000本书来构建数据集对于每本书进行tokenizer转化后每513个token写入为1条记录。这样我们在训练时每条记录我们采用前1-512个token作为训练取2-513个token作为label。 以下代码将读取我们处理好的数据集并转化为pytorch的dataloader from datasets import load_from_diskdataset load_from_disk(data/boocorpusopen_10000_512tokens) dataset dataset.with_format(torch) dataloader DataLoader(dataset, batch_sizeargs.batch_size, shuffleTrue, num_workers4) 然后我们就可以实例化一个GPT 2的model并开始训练具体的代码可以见repo https://github.com/gzroy/gpt2_torch.git 里面的train.py文件。 如果在本地显卡上训练对应12层的网络结构需要30多G的显存我的显卡是2080Ti只有11G显存因此只能指定6层decoder。我们可以在autodl上面租用一个40G显存的A100显卡价格是3.45元每小时在这个显卡上开启半精度进行训练大约1个小时可以跑10000个迭代batch大小为64。我总共训练了2小时最终在训练集上的Loss值为3.5左右准确度为35%花费为7元。 生成文本 最后我们可以基于这个训练了1个小时的GPT 2模型来测试一下看生成文本的效果如何如以下代码 from transformers import GPT2Tokenizer from model import GPT2 import torch from torch.nn import functional as F import argparseif __name__ __main__:parser argparse.ArgumentParser(descriptiongpt2 predict)parser.add_argument(--checkpoint_path, typestr, defaultcheckpoints/)parser.add_argument(--checkpoint_name, typestr, default)parser.add_argument(--d_model, typeint, default768)parser.add_argument(--block_size, typeint, default512)parser.add_argument(--dff, typeint, default768*4)parser.add_argument(--heads, typeint, default12)parser.add_argument(--decoder_layers, typeint, default6)parser.add_argument(--device, typestr, defaultcuda)parser.add_argument(--input, typestr)parser.add_argument(--generate_len, typeint, default100)parser.add_argument(--topk, typeint, default5)args parser.parse_args()tokenizer GPT2Tokenizer.from_pretrained(gpt2)vocab_size len(tokenizer.get_vocab())model GPT2(vocab_size, args.d_model, args.block_size, 0, args.heads, args.dff, 0, 0, 0, args.decoder_layers)model.to(args.device)model torch.compile(model)checkpoint torch.load(args.checkpoint_pathargs.checkpoint_name)model.load_state_dict(checkpoint[model_state_dict])token_id tokenizer.encode(args.input)input_data torch.reshape(torch.tensor(token_id, deviceargs.device), [1,-1])predicted model.generate(input_data, args.generate_len, 1.0, args.topk, args.block_size)print(Generated text:\n-------------------)print(tokenizer.decode(predicted.cpu().numpy()[0])) 运行以下命令给定一个文本的开头然后让模型生成200字看看 python predict.py --checkpoint_name model_1.pt --input it was saturday night, the street --generate_len 200 --topk 10 生成的文本如下 it was saturday night, the street lights blared and the street lights flickered on. A few more houses were visible.The front door opened, and a large man stepped in and handed him one. He handed the man the keys and a small smile. It looked familiar, and then a little too familiar. The door was closed.Hey! You guys out there? he said, his eyes wide.What are you up to? the man asked.Im just asking for you out in my office.The man was about thirty feet away from them.Im in a serious situation, but its just the way you are.He looked around at the man, the man looked up and down, and then his eyes met hers. He was a little older than he was, but his eyes were blue with red blood. He looked like a giant. His eyes were blue and red, and his jaw looked like a giant 可见生成的文本语法没有问题内容上也比较连贯上下文的逻辑也有关联。如果模型继续训练更长时间相信生成文本的内容会更加好。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业微营销网站国外手机设计网站

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

青浦教育平台网站建设wordpress函数the_posts

项目多人协作的困扰 相信大家多多少少都遇到过,当主线分支的代码,合入到自己的分支的时候,如果这时候,主线中有一些依赖的更新或者添加或者删除,如果合入之后,没有及时的install的话,项目启动的…

dede网站seowordpress清理修订

Kimi 是当前国内相当火爆的 AI 产品,输出结果和使用体验都非常不错。 Kimi 开放了 API 接口,新用户注册后会免费赠送 15 元额度。 Kimi API 的网址: platform.moonshot.cn/console 这是光明正大的白嫖方式,一定不要错过哦。 如…

合肥网站建设是什么网站关键词代码怎么做

Redis 主从复制 redis 主从复制配置 redis 主从复制启动 redis 主从复制断开 redis 主从复制主从复制构特点主从复制的拓扑结构一主一从⼀主多从树状主从 主从复制原理数据同步psync 运行流程全量复制流程部分复制流程实时复制 关于从节点何时晋升成主节点总结 redis 主从复制 …

高端网站建设如何收费红酒商城网站建设

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络…

自创网站怎么赚钱常见的网页布局结构有哪些

题干&#xff1a; 给出长度为n的序列a, 求有多少对数对 (i, j) (1 < i < j < n) 满足 ai aj 为完全平方数。 输入描述: 第一行一个整数 n (1 < n < 105) 第二行 n 个整数 ai (1 < ai < 105) 输出描述: 输出一个整数&#xff0c;表示满足上述条件的数…

注册网站商城需要什么条件4399网页版入口

Akka演员承诺并发。 有什么更好的模拟方式&#xff0c;看看使用商品硬件和软件处理1000万条消息需要花费多少时间&#xff0c;而无需进行任何低级调整。我用Java编写了整个1000万条消息的处理过程&#xff0c;整个结果令我惊讶。 当我在具有Intel i5 – 4核&#xff0c;4 Gb RA…

aspcms企业网站模板求购买链接

最近需要做一些向量检索&#xff0c;试试ES 一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 本地单机环境&#xff0c;无集群&#xff0c;也不基于Docker BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应…

网站策划设计海口seo网络推广

提供api&#xff0c;POST方式&#xff0c;根据传递过来的微博uid/appkey&#xff0c;判断该用户的ID是否在自己的数据库中。如果有&#xff0c;直接登录返回用户登录api的json。如果没有&#xff0c;就将该用户的IDtoken请求微博用户信息api&#xff1a;http://open.weibo.com/…

北大青鸟教网站开发吗雅安建设局网站

来源&#xff1a; 科技日报摘要&#xff1a;近日&#xff0c;十三届全国政协第一次双周协商座谈会在京召开。会议聚焦的话题是人工智能的发展与对策。夯实基础&#xff0c;提升原始创新能力中科院计算所智能处理器中心主任陈云霁做的就是智能芯片&#xff0c;作为智能芯片公司寒…

网站登录记录怎么删除做网站vpn多大内存

Visual C# 2010 编译器选项 - 输出文件 -/out:<文件> 指定输出文件名(默认值: 包含主类的文件或第一个文件的基名称)/target:exe 生成控制台可执行文件(默认) (缩写: /t:exe)/target:winexe …

青岛网站建设公司 中小企业补贴写字楼装修公司

参考资料 OpenWeatherMap提供了一个/forecast接口&#xff0c;用于获取未来几天的天气预报。你可以使用HTTP GET请求访问该接口&#xff0c;并根据你所在的城市或地理坐标获取相应的天气数据。 以下是一个示例请求的URL和一些常用的参数&#xff1a; URL: http://api.openwe…

做网站挣钱吗现在口碑营销有哪些

之前写过一篇关于springboot 与 mybatis整合的博文&#xff0c;使用了一段时间spring-data-jpa&#xff0c;发现那种方式真的是太爽了&#xff0c;mybatis的xml的映射配置总觉得有点麻烦。接口定义和映射离散在不同的文件中&#xff0c;阅读起来不是很方便。于是&#xff0c;准…

网站建设黄页免费观看拓什么设计网站

摘要&#xff1a; 在人工智能技术的不断进步中&#xff0c;AnimateAnyone项目以其创新性和易用性脱颖而出&#xff0c;成为GitHub上备受瞩目的AI项目之一。由阿里巴巴智能计算研究院开发的这一技术&#xff0c;允许用户通过提供一张静态照片&#xff0c;快速生成动态角色。本文…

泰州网站建设服务好兄弟们拿走不谢

原型与原型链 原型 在js中&#xff0c;每个对象都有一个原型&#xff08;prototype&#xff09;。原型是一个对象&#xff0c;其他对象可以通过原型来共享属性和方法。当我们创建一个对象时&#xff0c;它会自动关联到一个原型对象。 例如&#xff1a;function Person(name, a…

微信开放平台 网站开发临沂网站建设步骤

orm框架选型问题在过去的几年中&#xff0c;像Hibernate这样的对象关系映射工具已经帮助开发人员在处理关系数据库方面获得了巨大的生产力增长。 ORM使开发人员可以专注于应用程序逻辑&#xff0c;并避免为诸如插入或查询之类的简单任务编写大量样板SQL。 但是&#xff0c;充分…

网站建设大小pc网站怎么适配移动端

前段时间换了Tomcat6.0。一直都没配置mysql数据库数据源。今天想用时&#xff0c;既然按以前版本的方式配不上。。汗。。。后来上网查找才找到解决方案。写下这段话&#xff0c;以免忘记。。具体做法如下&#xff1a; 在$CATALINA_HOME/conf/server.xml文件中的<Host><…

北京网站建设产品介绍网站建设与功能模块

怎样在ArcGIS中保存地图模板以在地图制图与打印之前使用呢? 文章目录 一、地图模板简介二、地图模板创建1. 创建模板2. 创建缩略图3. 保存模板三、地图模板使用一、地图模板简介 使用ArcMap打开一个已有的地图模板,【文件】→【新建】,任选一个模板,这里选择一个传统模板。…

网站的建设费用分为青岛做公司网站

近似训练 近似训练&#xff08;Approximate Training&#xff09;是指在机器学习中使用近似的方法来训练模型&#xff0c;以降低计算复杂度或提高训练效率。这种方法通常用于处理大规模数据集或复杂模型&#xff0c;其中精确的训练算法可能过于耗时或计算资源不足。 近似训练…

平面设计师推荐网站施工企业科技创新规划

一、HashMap是什么&#xff0c;怎么用 1、HashMap是什么 HashMap 也是 Rust 标准库中提供的集合类型&#xff0c;但是又与动态数组不同&#xff0c;HashMap 中存储的是一一映射的 KV 键值对&#xff0c;并提供了平均时间复杂度为 O(1) 的查询方法。 2、HashMap怎么用 &…