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

网站开发微信支付详细教程WordPress 同步网易博客

网站开发微信支付详细教程,WordPress 同步网易博客,wordpress数据丢失,途牛网站建设策划书transformer的原理部分在前面基本已经介绍完了#xff0c;接下来就是代码部分#xff0c;因为transformer可以做的任务有很多#xff0c;文本的分类、时序预测、NER、文本生成、翻译等#xff0c;其相关代码也会有些不同#xff0c;所以会分别进行介绍 但是对于不同的任务…transformer的原理部分在前面基本已经介绍完了接下来就是代码部分因为transformer可以做的任务有很多文本的分类、时序预测、NER、文本生成、翻译等其相关代码也会有些不同所以会分别进行介绍 但是对于不同的任务其流程是一样的所以一些重复的步骤就不过多解释了。 1、 前期准备 数据和之前LSTM是一样的同时我们还使用上次训练好的词嵌入模型 以下是代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset import numpy as np from gensim.models import KeyedVectors from sklearn.model_selection import train_test_split import pandas as pd import jieba import re from sklearn.preprocessing import LabelEncoder# 加载数据 file_path ./data/news.csv data pd.read_csv(file_path)# 显示数据的前几行 data.head()# 文本清洗和分词函数 def clean_and_cut(text):# 删除特殊字符和数字text re.sub(r[^a-zA-Z\u4e00-\u9fff], , text)# 使用jieba进行分词words jieba.cut(text)return .join(words)X_train_cut data[text].apply(clean_and_cut) # 显示处理后的文本 data.head()# 将标签转换为数值形式 label_encoder LabelEncoder() data[label] label_encoder.fit_transform(data[label]) # 加载保存的word vectors loaded_wv KeyedVectors.load(word_vector, mmapr) class Word2VecDataset(Dataset):def __init__(self, texts, labels, word2vec, max_len100):self.texts textsself.labels labelsself.word2vec word2vecself.max_len max_lendef __len__(self):return len(self.texts)def __getitem__(self, idx):text self.texts[idx]label self.labels[idx]embeds [self.word2vec[word] if word in self.word2vec else np.zeros(self.word2vec.vector_size) for word in text]if len(embeds) self.max_len:embeds embeds[:self.max_len]else:embeds [np.zeros(self.word2vec.vector_size) for _ in range(self.max_len - len(embeds))]return torch.tensor(embeds, dtypetorch.float), torch.tensor(label, dtypetorch.long)# texts和labels是数据集中的文本和标签列表 texts X_train_cut.tolist() labels data[label].tolist()# 划分数据集 train_texts, test_texts, train_labels, test_labels train_test_split(texts, labels, test_size0.2) 2、位置编码和主模型 import mathclass PositionalEncoding(nn.Module):def __init__(self, d_model, max_len100):super(PositionalEncoding, self).__init__()# 创建一个位置编码矩阵pe torch.zeros(max_len, d_model)position torch.arange(0, max_len, dtypetorch.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) # (1, max_len, d_model)self.register_buffer(pe, pe)def forward(self, x):# x: (batch_size, max_len, d_model)x x self.pe.expand(x.size(0), -1, -1)return x2.1 PositionalEncoding 类 这个类用于创建和提供位置编码。位置编码是 Transformer 模型中用于注入序列中单词的位置信息的机制。这种位置信息对于模型理解单词的顺序很重要。 初始化方法 __init__ d_model模型的维度也是词嵌入的维度。max_len序列的最大长度。pe位置编码矩阵大小为 (1, max_len, d_model)。这个矩阵被注册为一个缓冲区这意味着它会被保存和加载与模型的其他参数一起。 前向传播方法 forward 输入 x 的形状是 (batch_size, max_len, d_model)。self.pe.expand(x.size(0), -1, -1)这个操作将位置编码矩阵扩展为 (batch_size, max_len, d_model)以便它可以与输入数据相加。最后将扩展后的位置编码矩阵加到输入数据上并返回结果。 #修改Transformer模型以添加位置编码 class TransformerClassifierWithPE(nn.Module):def __init__(self, num_classes, d_model100, nhead2, num_layers2, dim_feedforward2048, dropout0.1):super(TransformerClassifierWithPE, self).__init__()# 位置编码self.pos_encoder PositionalEncoding(d_model)# Transformer编码器层encoder_layers nn.TransformerEncoderLayer(d_modeld_model, nheadnhead, dim_feedforwarddim_feedforward, dropoutdropout)self.transformer_encoder nn.TransformerEncoder(encoder_layers, num_layersnum_layers)# 分类器self.classifier nn.Linear(d_model, num_classes)def forward(self, x):# x: (batch_size, max_len, d_model)x self.pos_encoder(x)x x.permute(1, 0, 2) # (max_len, batch_size, d_model)x self.transformer_encoder(x) # (max_len, batch_size, d_model)x x.mean(dim0) # (batch_size, d_model)x self.classifier(x) # (batch_size, num_classes)return x 2.2 TransformerClassifierWithPE 类 这个类定义了一个带有位置编码的 Transformer 分类器模型。 初始化方法 __init__ num_classes分类任务的类别数量。d_model模型的维度也是词嵌入的维度。nhead多头注意力的头数。num_layersTransformer 编码器层的数量。dim_feedforward前馈网络中的隐藏层维度。dropoutDropout 的概率。pos_encoderPositionalEncoding 实例用于位置编码。transformer_encoderTransformer 编码器由多个 TransformerEncoderLayer 组成。classifier线性分类器用于生成最终的分类结果。 前向传播方法 forward 输入 x 的形状是 (batch_size, max_len, d_model)。首先使用 self.pos_encoder(x) 获取位置编码后的输入。然后将输入的维度从 (batch_size, max_len, d_model) 转换为 (max_len, batch_size, d_model)这是因为 PyTorch 的 Transformer 编码器期望的输入维度是这样的。接下来通过 self.transformer_encoder(x) 应用 Transformer 编码器。然后使用 x.mean(dim0) 获取每个序列的平均表示。最后通过 self.classifier(x) 应用线性分类器得到最终的分类结果。 这个模型可以用于文本分类任务其中输入是文本序列的词嵌入表示。 3、训练模型 # 模型参数 d_model 512 nhead 8 num_encoder_layers 3 dim_feedforward 2048 num_classes len(data.label.unique()) # 假设label_dict是我们的标签字典 max_len 256model TransformerClassifierWithPE( d_modeld_model, nheadnhead, num_layersnum_encoder_layers, dim_feedforwarddim_feedforward, num_classesnum_classes, max_lenmax_len,dropout0.1)----------------------------- TransformerModel((pos_encoder): PositionalEncoding()(transformer_encoder): TransformerEncoder((layers): ModuleList((0-2): 3 x TransformerEncoderLayer((self_attn): MultiheadAttention((out_proj): NonDynamicallyQuantizableLinear(in_features512, out_features512, biasTrue))(linear1): Linear(in_features512, out_features2048, biasTrue)(dropout): Dropout(p0.1, inplaceFalse)(linear2): Linear(in_features2048, out_features512, biasTrue)(norm1): LayerNorm((512,), eps1e-05, elementwise_affineTrue)(norm2): LayerNorm((512,), eps1e-05, elementwise_affineTrue)(dropout1): Dropout(p0.1, inplaceFalse)(dropout2): Dropout(p0.1, inplaceFalse))))(decoder): Linear(in_features512, out_features10, biasTrue) )# 训练模型 num_epochs 20 for epoch in range(num_epochs):for inputs, labels in train_loader:# 清除梯度optimizer.zero_grad()# 前向传播outputs model(inputs)# 计算损失loss criterion(outputs, labels)# 反向传播loss.backward()# 更新参数optimizer.step()print(fEpoch [{epoch1}/{num_epochs}], Loss: {loss.item()}) # 在测试集上评估模型 model.eval() with torch.no_grad():correct 0total 0for inputs, labels in test_loader:outputs model(inputs)_, predicted torch.max(outputs.data, 1)total labels.size(0)correct (predicted labels).sum().item()print(fAccuracy of the model on the test set: {100 * correct / total}%)
http://www.dnsts.com.cn/news/135443.html

相关文章:

  • 东莞微信网站建设做网站的软件去哪里买
  • 深圳网站建设-中国互联建一个网站一般要多少钱
  • 嘉兴网站建设999 999网站首页自动下拉广告
  • 慕枫宁波网站建设中国教育建设协会网站
  • 电脑搭建网站需要空间培训机构查询网
  • 重庆网站建设费用wordpress汉化免费企业主题
  • 个人网站推广手段有哪些商城网站模板免费下载
  • 建设工程人力资源官网wordpress 自动seo插件
  • 网站后期增加内容做外贸面料哪个网站可以接单
  • 南山老品牌网站建设创立网站做电商
  • 网站建设的要素网站的特点
  • 电子商务网站建设与管理考试例题少女免费观看片tv
  • 网站上的图是怎么做的制作网站空间域名
  • 北京冬奥会网站制作素材网络舆情应急处置预案
  • 网站建设沙漠风在线可以做翻译的网站
  • 苏州高端企业网站建设室内设计3d效果图
  • 有哪些比较好的外贸网站棋牌网站开发多少钱
  • 网站建设的标准化建设是什么分布式移动网站开发技术
  • 深圳商业网站建设推荐公司西安网站建设小程序
  • 广州网站优化步骤服装设计投稿平台
  • 辽宁响应式网站建设推荐网页建站网站申请
  • 徐州建站模板公司行政机关 网站源码
  • 湖南专业做网站企业天津网站公司
  • 备案号查询网站网址wordpress.exe
  • 模仿京东商城网站开发视频个人网站域名所有权
  • 网站的分析与设计wordpress 主题末班
  • 宁波高新区建设局网站外包合同究竟能不能签
  • 海珠区 网站设计wordpress自定义字段值调用
  • 惠州市建网站公司网站制作软件是什么意思
  • 专业的网站建设服务商建筑培训机构排名前十