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

潍城区住房和城乡建设局网站网络营销七个步骤

潍城区住房和城乡建设局网站,网络营销七个步骤,做网站 什么语言好,wordpress php.ini在RNNGNN与RNN对比实践介绍一、环境设置二、数据准备2.1 参数设置2.2 对齐数据2.3 用Dataset 与 DataLoader 加载三、模型配置四、模型训练五、模型评估六、模型预测GNN与RNN对比 先进行一波拉踩 全连接神经网络存在的问题: 输入和输出的维数都是固定的网络的输出只…

RNN

  • GNN与RNN对比
  • 实践介绍
  • 一、环境设置
  • 二、数据准备
    • 2.1 参数设置
    • 2.2 对齐数据
    • 2.3 用Dataset 与 DataLoader 加载
  • 三、模型配置
  • 四、模型训练
  • 五、模型评估
  • 六、模型预测

GNN与RNN对比

先进行一波拉踩

全连接神经网络存在的问题:

  1. 输入和输出的维数都是固定的
  2. 网络的输出只依赖于当前的输入
  3. 位置无关性

在这里插入图片描述

循环神经网络通过使用带自反馈(隐藏层)的神经元,能够处理任意长度的序列。循环神经网络比前前馈神经网络更加符合生物神经网络结构,已经被广泛应用在语音识别、图像处理、语言模型以及自然语言生成等任务上。

实践介绍

在IMDB数据集上用RNN网络完成文本分类的任务。

IMDB数据集是一个对电影评论标注为正向评论与负向评论的数据集,共有20539条文本数据作为训练集,20539条文本数据作为测试集。 该数据集的官方地址为: http://ai.stanford.edu/~amaas/data/sentiment/

一、环境设置

import paddle
import numpy as np
import matplotlib.pyplot as plt
import paddle.nn as nnprint(paddle.__version__)  # 查看当前版本# cpu/gpu环境选择,在 paddle.set_device() 输入对应运行设备。
#device = paddle.set_device('gpu')

二、数据准备

构建了训练集与测试集后,可以通过 word_idx 获取数据集的词表。在字典中还会添加一个特殊的词,用来在后续对batch中较短的句子进行填充。

word_dict = train_dataset.word_idx  # 获取数据集的词表# add a pad token to the dict for later padding the sequence
word_dict['<pad>'] = len(word_dict)for k in list(word_dict)[:5]:print("{}:{}".format(k.decode('ASCII'), word_dict[k]))print("...")for k in list(word_dict)[-5:]:print("{}:{}".format(k if isinstance(k, str) else k.decode('ASCII'), word_dict[k]))print("totally {} words".format(len(word_dict)))

在这里插入图片描述

2.1 参数设置

设置词表大小,embedding的大小,batch_size,等等

vocab_size = len(word_dict) + 1
print(vocab_size)
emb_size = 256
seq_len = 200
batch_size = 32
epochs = 2
pad_id = word_dict['<pad>']classes = ['negative', 'positive']# 生成句子列表
def ids_to_str(ids):# print(ids)words = []for k in ids:w = list(word_dict)[k]words.append(w if isinstance(w, str) else w.decode('ASCII'))return " ".join(words)
# 可以用 docs 获取数据的list,用 labels 获取数据的label值,打印出来对数据有一个初步的印象。
# 取出来第一条数据看看样子。
sent = train_dataset.docs[0]
label = train_dataset.labels[1]
print('sentence list id is:', sent)
print('sentence label id is:', label)
print('--------------------------')
print('sentence list is: ', ids_to_str(sent))
print('sentence label is: ', classes[label])

2.2 对齐数据

文本数据中,每一句话的长度都是不一样的,为了方便后续的神经网络的计算,常见的处理方式是把数据集中的数据都统一成同样长度的数据。这包括:对于较长的数据进行截断处理,对于较短的数据用特殊的词进行填充。

# 读取数据归一化处理
def create_padded_dataset(dataset):padded_sents = []labels = []for batch_id, data in enumerate(dataset):sent, label = data[0], data[1]padded_sent = np.concatenate([sent[:seq_len], [pad_id] * (seq_len - len(sent))]).astype('int32')padded_sents.append(padded_sent)labels.append(label)return np.array(padded_sents), np.array(labels)# 对train、test数据进行实例化
train_sents, train_labels = create_padded_dataset(train_dataset)
test_sents, test_labels = create_padded_dataset(test_dataset)# 查看数据大小及举例内容
print(train_sents.shape)
print(train_labels.shape)
print(test_sents.shape)
print(test_labels.shape)for sent in train_sents[:3]:print(ids_to_str(sent))

2.3 用Dataset 与 DataLoader 加载

将前面准备好的训练集与测试集用Dataset 与 DataLoader封装后,完成数据的加载。

class IMDBDataset(paddle.io.Dataset):'''继承paddle.io.Dataset类进行封装数据'''def __init__(self, sents, labels):self.sents = sentsself.labels = labelsdef __getitem__(self, index):data = self.sents[index]label = self.labels[index]return data, labeldef __len__(self):return len(self.sents)train_dataset = IMDBDataset(train_sents, train_labels)
test_dataset = IMDBDataset(test_sents, test_labels)train_loader = paddle.io.DataLoader(train_dataset, return_list=True,shuffle=True, batch_size=batch_size, drop_last=True)
test_loader = paddle.io.DataLoader(test_dataset, return_list=True,shuffle=True, batch_size=batch_size, drop_last=True)

三、模型配置

本示例使用一个序列特性的RNN网络,在查找到每个词对应的embedding后,简单的取平均,作为一个句子的表示。然后用Linear进行线性变换。为了防止过拟合,还使用了Dropout。

RNN对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,利用了RNN的这种能力,使深度学习模型在解决语音识别、语言模型、机器翻译以及时序分析等NLP领域的问题时有所突破。

在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出

隐含层节点之间增加了互连。为了分析方便,我们常将RNN在时间上进行展开

import paddle.nn as nn
import paddle# 定义RNN网络
class MyRNN(paddle.nn.Layer):def __init__(self):super(MyRNN, self).__init__()self.embedding = nn.Embedding(vocab_size, 256)self.rnn = nn.SimpleRNN(256, 256, num_layers=2, direction='forward',dropout=0.5)#维数,隐藏维数,层数self.linear = nn.Linear(in_features=256*2, out_features=2)self.dropout = nn.Dropout(0.5)def forward(self, inputs):emb = self.dropout(self.embedding(inputs))#output形状大小为[batch_size,seq_len,num_directions * hidden_size]#hidden形状大小为[num_layers * num_directions, batch_size, hidden_size]#把前向的hidden与后向的hidden合并在一起output, hidden = self.rnn(emb)hidden = paddle.concat((hidden[-2,:,:], hidden[-1,:,:]), axis = 1)#hidden形状大小为[batch_size, hidden_size * num_directions]hidden = self.dropout(hidden)return self.linear(hidden) 

四、模型训练

# 可视化定义
def draw_process(title,color,iters,data,label):plt.title(title, fontsize=24)plt.xlabel("iter", fontsize=20)plt.ylabel(label, fontsize=20)plt.plot(iters, data,color=color,label=label) plt.legend()plt.grid()plt.show()
# 对模型进行封装
def train(model):model.train()opt = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())steps = 0Iters, total_loss, total_acc = [], [], []for epoch in range(epochs):for batch_id, data in enumerate(train_loader):steps += 1sent = data[0]label = data[1]logits = model(sent)loss = paddle.nn.functional.cross_entropy(logits, label)acc = paddle.metric.accuracy(logits, label)if batch_id % 500 == 0:  # 500个epoch输出一次结果Iters.append(steps)total_loss.append(loss.numpy()[0])total_acc.append(acc.numpy()[0])print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy()))loss.backward()opt.step()opt.clear_grad()# evaluate model after one epochmodel.eval()accuracies = []losses = []for batch_id, data in enumerate(test_loader):sent = data[0]label = data[1]logits = model(sent)loss = paddle.nn.functional.cross_entropy(logits, label)acc = paddle.metric.accuracy(logits, label)accuracies.append(acc.numpy())losses.append(loss.numpy())avg_acc, avg_loss = np.mean(accuracies), np.mean(losses)print("[validation] accuracy: {}, loss: {}".format(avg_acc, avg_loss))model.train()# 保存模型paddle.save(model.state_dict(),str(epoch)+"_model_final.pdparams")# 可视化查看draw_process("trainning loss","red",Iters,total_loss,"trainning loss")draw_process("trainning acc","green",Iters,total_acc,"trainning acc")model = MyRNN()
train(model)

五、模型评估

'''
模型评估
'''
model_state_dict = paddle.load('1_model_final.pdparams')  # 导入模型
model = MyRNN()
model.set_state_dict(model_state_dict) 
model.eval()
accuracies = []
losses = []for batch_id, data in enumerate(test_loader):sent = data[0]label = data[1]logits = model(sent)loss = paddle.nn.functional.cross_entropy(logits, label)acc = paddle.metric.accuracy(logits, label)accuracies.append(acc.numpy())losses.append(loss.numpy())avg_acc, avg_loss = np.mean(accuracies), np.mean(losses)
print("[validation] accuracy: {}, loss: {}".format(avg_acc, avg_loss))

在这里插入图片描述

六、模型预测

def ids_to_str(ids):words = []for k in ids:w = list(word_dict)[k]words.append(w if isinstance(w, str) else w.decode('UTF-8'))return " ".join(words)label_map = {0:"negative", 1:"positive"}# 导入模型
model_state_dict = paddle.load('1_model_final.pdparams')
model = MyRNN()
model.set_state_dict(model_state_dict) 
model.eval()for batch_id, data in enumerate(test_loader):sent = data[0]results = model(sent)predictions = []for probs in results:# 映射分类labelidx = np.argmax(probs)labels = label_map[idx]predictions.append(labels)for i,pre in enumerate(predictions):print(' 数据: {} \n 情感: {}'.format(ids_to_str(sent[0]), pre))breakbreak

在这里插入图片描述

http://www.lbrq.cn/news/2706571.html

相关文章:

  • java制作的网站专业软文
  • 网站开发app营销培训机构哪家最专业
  • 惠州网站开发公司重庆疫情最新消息
  • 织梦复制网站模板百度客服人工
  • 学校网站建设的作用如何搭建一个网站平台
  • 国家中职示范校建设专题网站佛山百度推广公司
  • 移动网站建站系统下载怎么做一个网站的步骤
  • 中国优秀企业网站优化精灵
  • 做一个网站加优化排名得多少钱软文素材网站
  • 学做烘焙的网站登录百度账号注册
  • 自适应产品网站模板网店推广方案范文
  • 太原网站制作最新招聘信息网络销售工作靠谱吗
  • 东莞企业网站费用小程序源码网
  • 我国市级网站建设分析模板长沙关键词优化公司电话
  • 玉环住房与城乡建设规划局网站成人电脑培训班办公软件
  • 有哪些开发网站公司营销推广平台
  • 谁做的12306网站关键词查询
  • 东莞网站建设制作公司排名成都自动seo
  • 峰峰做网站小游戏推广接单平台
  • 做网站编辑累吗百度点击优化
  • 个人备案的网站可以做宣传广西壮族自治区免费百度推广
  • 安康网站建设百度关键词收录
  • 如何做免费网站推广锦州网站seo
  • 合肥做网站拉新推广怎么快速拉人
  • 做网站的原型 免费网络推广费用大概价格
  • 宝安网站设计制作商务软文写作300字
  • 知名广告公司有哪些东莞百度seo推广公司
  • 外包网站怎么做seo搜索引擎优化的核心及内容
  • 自己如何做独立网站保定百度seo排名
  • 模板网站不可以做seo优化吗公司网站设计模板
  • Python之Django使用技巧(附视频教程)
  • Python 元类基础:从理解到应用的深度解析
  • 前端css学习笔记4:常用样式设置
  • Java毕业设计选题推荐 |基于SpringBoot的水产养殖管理系统 智能水产养殖监测系统 水产养殖小程序
  • dubbo应用之门面设计模式
  • windows git安装步骤