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

做网站主机要选好合肥网络推广培训学校

做网站主机要选好,合肥网络推广培训学校,wordpress速度插件,安徽合肥建设厅网站递归神经网络 #xff08;RNN#xff09;#xff1a; 定义#xff1a;RNN 是一类专为顺序数据处理而设计的人工神经网络。 顺序处理#xff1a;RNN 保持一个隐藏状态#xff0c;该状态捕获有关序列中先前输入的信息#xff0c;使其适用于涉及顺序依赖关系的任务。词嵌入…递归神经网络 RNN 定义RNN 是一类专为顺序数据处理而设计的人工神经网络。 顺序处理RNN 保持一个隐藏状态该状态捕获有关序列中先前输入的信息使其适用于涉及顺序依赖关系的任务。词嵌入 定义词嵌入是捕获语义关系的词的密集向量表示。 重要性它们允许神经网络学习上下文信息和单词之间的关系。 实现使用预先训练的词嵌入Word2Vec、GloVe或在模型中包含嵌入层。文本标记化和填充 代币化将文本分解为单个单词或子单词。 填充通过添加零或截断来确保所有序列具有相同的长度。Keras 中的顺序模型 实现利用 Keras 库中的 Sequential 模型创建线性层堆栈。嵌入层 实现向模型添加嵌入层将单词转换为密集向量。 配置指定输入维度、输出维度嵌入大小和输入长度。循环层LSTM 或 GRU LSTM 和 GRU长短期记忆 LSTM 和门控循环单元 GRU 层有助于捕获长期依赖关系。 实现将一个或多个 LSTM 或 GRU 层添加到模型中。致密层 目的密集层用于最终分类输出。 实现添加一个或多个具有适当激活函数的密集层。激活功能 选择ReLU整流线性单元或tanh是隐藏层中激活函数的常见选择。损失函数和优化器 损失函数稀疏分类交叉熵通常用于文本分类任务。 优化Adam 或 RMSprop 是常用的优化器。批处理和排序 批处理在批量输入序列上训练模型。 处理不同长度的物料使用填充来处理不同长度的序列。培训流程 汇编使用所选的损失函数、优化器和指标编译模型。 训练将模型拟合到训练数据在单独的集合上进行验证。防止过拟合 技术实现 dropout 或 recurrent dropout 层以防止过拟合。 正规化如果需要请考虑 L1 或 L2 正则化。超参数调优 参数根据验证性能调整超参数例如学习率、批量大小和循环单元数。评估指标 指标选择适当的指标如准确率、精确率、召回率或 F1 分数进行评估。 # 文本分类任务实战 # 数据集构建影评数据集进行情感分析 # 词向量模型加载训练好的词向量或者自己训练 # 序列网络模型训练好RNN模型进行识别import os import warnings warnings.filterwarnings(ignore) import tensorflow as tf import numpy as np import pprint import logging import time from collections import Counterfrom pathlib import Path from tqdm import tqdm#加载影评数据集可以自动下载放到对应位置 (x_train, y_train), (x_test, y_test) tf.keras.datasets.imdb.load_data() # ax_train.shape # print(a) # 读进来的数据是已经转换成ID映射的一般的数据读进来都是词语都需要手动转换成ID映射的_word2idx tf.keras.datasets.imdb.get_word_index() word2idx {w: i3 for w, i in _word2idx.items()} word2idx[pad] 0 word2idx[start] 1 word2idx[unk] 2 idx2word {i: w for w, i in word2idx.items()}# 按文本长度大小进行排序def sort_by_len(x, y):x, y np.asarray(x), np.asarray(y)idx sorted(range(len(x)), keylambda i: len(x[i]))return x[idx], y[idx]# 将中间结果保存到本地万一程序崩了还得重玩保存的是文本数据不是IDx_train, y_train sort_by_len(x_train, y_train) x_test, y_test sort_by_len(x_test, y_test)def write_file(f_path, xs, ys):with open(f_path, w,encodingutf-8) as f:for x, y in zip(xs, ys):f.write(str(y)\t .join([idx2word[i] for i in x][1:])\n)write_file(./data/train.txt, x_train, y_train) write_file(./data/test.txt, x_test, y_test)# 构建语料表基于词频来进行统计counter Counter() with open(./data/train.txt,encodingutf-8) as f:for line in f:line line.rstrip()label, words line.split(\t)words words.split( )counter.update(words)words [pad] [w for w, freq in counter.most_common() if freq 10] print(Vocab Size:, len(words))Path(./vocab).mkdir(exist_okTrue)with open(./vocab/word.txt, w,encodingutf-8) as f:for w in words:f.write(w\n)# 得到新的word2id映射表word2idx {} with open(./vocab/word.txt,encodingutf-8) as f:for i, line in enumerate(f):line line.rstrip()word2idx[line] i# embedding层 # 可以基于网络来训练也可以直接加载别人训练好的一般都是加载预训练模型 # 这里有一些常用的https://nlp.stanford.edu/projects/glove/#做了一个大表里面有20598个不同的词【20599*50】 embedding np.zeros((len(word2idx)1, 50)) # 1 表示如果不在语料表中就都是unknowwith open(./data/glove.6B.50d.txt,encodingutf-8) as f: #下载好的count 0for i, line in enumerate(f):if i % 100000 0:print(- At line {}.format(i)) #打印处理了多少数据line line.rstrip()0sp line.split( )word, vec sp[0], sp[1:]if word in word2idx:count 1embedding[word2idx[word]] np.asarray(vec, dtypefloat32) #将词转换成对应的向量# 现在已经得到每个词索引所对应的向量print([%d / %d] words have found pre-trained values%(count, len(word2idx))) np.save(./vocab/word.npy, embedding) print(Saved ./vocab/word.npy)# 构建训练数据 # 注意所有的输入样本必须都是相同shape文本长度词向量维度等 # 数据生成器 # tf.data.Dataset.from_tensor_slices(tensor)将tensor沿其第一个维度切片返回一个含有N个样本的数据集这样做的问题就是需要将整个数据集整体传入然后切片建立数据集类对象比较占内存。 # # tf.data.Dataset.from_generator(data_generator,output_data_type,output_data_shape)从一个生成器中不断读取样本def data_generator(f_path, params):with open(f_path,encodingutf-8) as f:print(Reading, f_path)for line in f:line line.rstrip()label, text line.split(\t)text text.split( )x [params[word2idx].get(w, len(word2idx)) for w in text]#得到当前词所对应的IDif len(x) params[max_len]:#截断操作x x[:params[max_len]]else:x [0] * (params[max_len] - len(x))#补齐操作y int(label)yield x, ydef dataset(is_training, params):_shapes ([params[max_len]], ())_types (tf.int32, tf.int32)if is_training:ds tf.data.Dataset.from_generator(lambda: data_generator(params[train_path], params),output_shapes_shapes,output_types_types, )ds ds.shuffle(params[num_samples])ds ds.batch(params[batch_size])ds ds.prefetch(tf.data.experimental.AUTOTUNE) # 设置缓存序列根据可用的CPU动态设置并行调用的数量说白了就是加速else:ds tf.data.Dataset.from_generator(lambda: data_generator(params[test_path], params),output_shapes_shapes,output_types_types, )ds ds.batch(params[batch_size])ds ds.prefetch(tf.data.experimental.AUTOTUNE)return ds# 自定义网络模型class Model(tf.keras.Model):def __init__(self, params):super().__init__()self.embedding tf.Variable(np.load(./vocab/word.npy),dtypetf.float32,namepretrained_embedding,trainableFalse, )self.drop1 tf.keras.layers.Dropout(params[dropout_rate])self.drop2 tf.keras.layers.Dropout(params[dropout_rate])self.drop3 tf.keras.layers.Dropout(params[dropout_rate])self.rnn1 tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(params[rnn_units], return_sequencesTrue))self.rnn2 tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(params[rnn_units], return_sequencesTrue))self.rnn3 tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(params[rnn_units], return_sequencesTrue))self.drop_fc tf.keras.layers.Dropout(params[dropout_rate])self.fc tf.keras.layers.Dense(2 * params[rnn_units], tf.nn.elu)self.out_linear tf.keras.layers.Dense(2)def call(self, inputs, trainingFalse):if inputs.dtype ! tf.int32:inputs tf.cast(inputs, tf.int32)batch_sz tf.shape(inputs)[0]rnn_units 2 * params[rnn_units]x tf.nn.embedding_lookup(self.embedding, inputs)x tf.reshape(x, (batch_sz * 10 * 10, 10, 50))x self.drop1(x, trainingtraining)x self.rnn1(x)x tf.reduce_max(x, 1)x tf.reshape(x, (batch_sz * 10, 10, rnn_units))x self.drop2(x, trainingtraining)x self.rnn2(x)x tf.reduce_max(x, 1)x tf.reshape(x, (batch_sz, 10, rnn_units))x self.drop3(x, trainingtraining)x self.rnn3(x)x tf.reduce_max(x, 1)x self.drop_fc(x, trainingtraining)x self.fc(x)x self.out_linear(x)return x# 设置参数params {vocab_path: ./vocab/word.txt,train_path: ./data/train.txt,test_path: ./data/test.txt,num_samples: 25000,num_labels: 2,batch_size: 32,max_len: 1000,rnn_units: 200,dropout_rate: 0.2,clip_norm: 10.,num_patience: 3,lr: 3e-4, }def is_descending(history: list):history history[-(params[num_patience]1):]for i in range(1, len(history)):if history[i-1] history[i]:return Falsereturn Trueword2idx {} with open(params[vocab_path],encodingutf-8) as f:for i, line in enumerate(f):line line.rstrip()word2idx[line] i params[word2idx] word2idx params[vocab_size] len(word2idx) 1model Model(params) model.build(input_shape(None, None))#设置输入的大小或者fit时候也能自动找到 #pprint.pprint([(v.name, v.shape) for v in model.trainable_variables])#链接https://tensorflow.google.cn/api_docs/python/tf/keras/optimizers/schedules/ExponentialDecay?versionstable #return initial_learning_rate * decay_rate ^ (step / decay_steps) decay_lr tf.optimizers.schedules.ExponentialDecay(params[lr], 1000, 0.95)#相当于加了一个指数衰减函数 optim tf.optimizers.Adam(params[lr]) global_step 0history_acc [] best_acc .0t0 time.time() logger logging.getLogger(tensorflow) logger.setLevel(logging.INFO)while True:# 训练模型for texts, labels in dataset(is_trainingTrue, paramsparams):with tf.GradientTape() as tape: # 梯度带记录所有在上下文中的操作并且通过调用.gradient()获得任何上下文中计算得出的张量的梯度logits model(texts, trainingTrue)loss tf.nn.sparse_softmax_cross_entropy_with_logits(labelslabels, logitslogits)loss tf.reduce_mean(loss)optim.lr.assign(decay_lr(global_step))grads tape.gradient(loss, model.trainable_variables)grads, _ tf.clip_by_global_norm(grads, params[clip_norm]) # 将梯度限制一下有的时候回更新太猛防止过拟合optim.apply_gradients(zip(grads, model.trainable_variables)) # 更新梯度if global_step % 50 0:logger.info(Step {} | Loss: {:.4f} | Spent: {:.1f} secs | LR: {:.6f}.format(global_step, loss.numpy().item(), time.time() - t0, optim.lr.numpy().item()))t0 time.time()global_step 1# 验证集效果m tf.keras.metrics.Accuracy()for texts, labels in dataset(is_trainingFalse, paramsparams):logits model(texts, trainingFalse)y_pred tf.argmax(logits, axis-1)m.update_state(y_truelabels, y_predy_pred)acc m.result().numpy()logger.info(Evaluation: Testing Accuracy: {:.3f}.format(acc))history_acc.append(acc)if acc best_acc:best_acc acclogger.info(Best Accuracy: {:.3f}.format(best_acc))if len(history_acc) params[num_patience] and is_descending(history_acc):logger.info(Testing Accuracy not improved over {} epochs, Early Stop.format(params[num_patience]))break
http://www.zqtcl.cn/news/524553/

相关文章:

  • 有了网站开发app是不是更容易自建网站管理
  • 网站将要准备建设的内容有哪些做外贸有效的网站
  • 网站设计博客网站内容添加
  • 网站建站行业新闻微盟开店怎么收费
  • 网站的建设参考文献郑州网站建设中国建设建设银行
  • 重庆那些公司的网站是网易做的电信100m光纤做网站
  • 网站怎么设计产品营销策略包括哪些内容
  • 天元建设集团有限公司破产重组河源seo排名
  • 网站权重什么意思seo的搜索排名影响因素有
  • 建设报名系统是正规网站吗计算机培训班出来好找工作吗
  • 网站上的文章用秀米可以做吗宁波外客网络科技有限公司
  • 网站底部导航代码成品视频直播软件推荐哪个好一点ios
  • 上海电商网站开发公司垫江网站建设价格
  • 门户网站建设存在问题与不足商城网站开发项目文档
  • wordpress建站方便吗wordpress加入海报功能
  • 网站名称注册保护2018wordpress主题
  • 类似享设计的网站企业信息系统公示
  • 如何学习网站开发酒店网站源码
  • 怎么用nas做网站服务器WordPress云虚拟空间
  • 网站设计 ipad企业品牌推广宣传方案
  • 织梦网站怎么更换模板济南建设厅网站
  • 用wordpress仿站专业做俄语网站建设司
  • 做暧暧网站网站开发 思维导图
  • asp.net做登录注册网站苏醒的wordpress主题怎么样
  • 正能量不良网站推荐2020网站建设单位是什么
  • 固镇网站建设郑州网站seo顾问
  • 新建定制网站费用公司网站手机端和电脑端
  • 网站域名注册地址苏州建设培训中心网站
  • 高端娱乐网站建设沈阳seo专业培训
  • 做播放器电影网站需要多少钱6广州seo公司推荐