原文链接:https://tecdat.cn/?p=37634
本文聚焦于利用马尔可夫递归神经网络(MarkovRNN)结合树库展开建模工作。MarkovRNN 通过整合马尔可夫特性与离散随机变量来深入探索递归神经网络中的随机转换机制,旨在高效处理具有复杂潜在信息的高度结构化序列数据(点击文末“阅读原文”获取完整代码数据)。
在该模型中,每个时间步的离散样本均源自参数化的分类分布,且潜在信息的编码取决于所选状态对应的不同状态编码器。
相关视频
一、引言
语言建模在自然语言处理领域至关重要,它对于理解和生成自然语言文本起着关键作用。传统方法在处理复杂数据结构和潜在信息时存在一定局限性,而 MarkovRNN 模型为解决这些问题提供了新的思路。
马尔可夫递归神经网络(MRNN)通过将马尔可夫性质与离散随机变量相结合来探索递归神经网络中的随机转换。提出这个模型是为了处理具有复杂潜在信息的高度结构化的序列数据。在每个时间步,离散样本从参数化的分类分布中抽取,而潜在信息则根据所选状态由不同的状态编码器进行编码。
二、实验设置
软件环境
采用 Tensorflow 1.4.1 构建和运行模型。
数据集
选用树库作为数据集。数据导入:
from tensorflow.examples.tutorials.mnist import input_dataimport tensorflow as tfimport tensorflow.contrib.slim as slimimport numpy as npimport reader
三、模型构建
(一)配置参数
定义了一个配置类(Config),其中涵盖了模型训练和运行的关键参数,如初始化规模(init\_scale)、最大训练轮数(max\_epoch)、批量大小(batch_size)等。
init\_scale = 0.2max\_epoch = 50max\_max\_epoch = 50batch\_size = 50display\_step = 50lr = 20.0lr\_decay = 0.3embed\_drop = 0.2input_drop = 0.4
(二)数据处理
Input 类负责处理输入数据,对数据的批量大小、时间步数、轮次大小等进行了定义,并实现了输入数据和目标数据的生成。
class Input(object):def \_\_init\_\_(self, config, data, name=None):self.batch\_size = config.batch\_sizeself.num\_steps = config.num\_stepsself.epoch\_size = ((len(data) // self.batch\_size) - 1) // self.num\_stepsself.input\_data, self.targets = reader.ptb\_producer(data, self.batch\_size, self.num_steps, name=name)
(三)模型架构
Model 类构建了核心的 MRNN 模型。在模型初始化过程中,定义了如嵌入层(embedding)、输入(inputs)等变量。例如:
class Model(object):def \_\_init\_\_(self, is\_training, config, data):with tf.device("/cpu:0"):self.embedding = tf.get\_variable("embedding", \[config.vocab\_size, config.input\_size\], dtype=tf.float32)self.inputs = tf.nn.embedding\_lookup(self.embedding, self.data.input\_data)
在不同的作用域(scope)下构建了 MRNN 的复杂结构,同时计算了交叉熵(cross - entropy)、负对数似然(NLL)、熵(entropy)、成本(cost)等重要指标,并定义了训练操作(train_op)等。
四、实验过程与结果
(一)数据准备
读取原始数据(raw\_data),并根据配置(config)和评估配置(eval\_config)创建训练、验证和测试的输入数据(train\_input、valid\_input、test_input)以及对应的模型(m、mvalid、mtest)。
import osraw\_data = reader.ptb\_raw\_data('./data/')train\_data, valid\_data, test\_data, w2id, id2w = raw_dataconfig = Config()
(二)模型训练与评估
利用 TensorFlow 的 Supervisor 管理会话(session)进行模型训练。在每个训练轮次中,根据特定规则调整学习率和温度。训练完成后,进行模型验证与测试。实验结果表明,模型在处理语言建模任务方面表现出一定的性能,最终得到了相应的困惑度(perplexity)值,并绘制了训练和验证的困惑度曲线。
initializer = tf.random\_uniform\_initializer(-config.init\_scale,config.init\_scale)st_input)
``````
plt.figure()plt.plot(range(1,len(ppl\_train)+1),ppl\_train,'b')plt.show()plt.figure()plt.plot(range(1,len(ppl\_valid)+1),ppl\_valid,'r')plt.show()
点击标题查阅往期内容
Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型
左右滑动查看更多
01
02
03
04
h = np.array(h)print(h.shape)h = np.array(np.split(h,2,3))print(h.shape)z = np.squeeze(np.array(z),\[1,2\])print(z.shape)qz = np.squeeze(np.array(qz),\[1,2\])print(qz.shape)x = np.array(x)print(x.shape)y = np.array(y)print(y.shape)logits = np.squeeze(np.array(logits),\[1,2\])print(logits.shape)
(三)数据可视化
为了进一步分析模型的数据特征,进行了数据可视化操作。
这些可视化操作包括使用t - SNE
算法对数据进行降维处理,并将处理后的数据绘制成散点图进行展示,同时还对部分数据的分布进行了图像展示和统计图表展示。
from sklearn.manifold import TSNEstart\_time = time.time()N = 10000# h\_tsne = TSNE(n\_components=2).fit\_transform(h\[:N,1,:\])h\_tsne = TSNE(n\_components=2).fit\_transform(h\[0,:N,0,0,:\])print("time: %f" % (time.time()-start\_time))
``````
N1 = 0N2 = 20step=1000N=10000for i in range(0,N,step):fig = plt.figure(figsize=\[5,5\])plt.subplot(2,1,1)plt.imshow(z\[N1+i:N2+i,:\].T)plt.subplot(2,1,2)plt.imshow(qz\[N1+i:N2+i,:\].T)plt.savefig(URL+'/traj_'+str(i)+'.png')plt.show()
plt.bar(np.arange(config.K), np.sum(z,0)/np.sum(z), alpha=0.8)plt.savefig(URL+'/stat.png')plt.show()
本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群!
资料获取
在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。
点击文末“阅读原文”
获取全文完整代码数据资料。
本文选自《Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究》。
点击标题查阅往期内容
Python股票预测:注意力多层Attention RNN LSTM应用
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
用PyTorch机器学习神经网络分类预测银行客户流失模型
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R语言深度学习:用keras神经网络回归模型预测时间序列数据
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
MATLAB中用BP神经网络预测人体脂肪百分比数据
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型
R语言实现CNN(卷积神经网络)模型进行回归数据分析
SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型
【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析
Python使用神经网络进行简单文本分类
R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
R语言基于递归神经网络RNN的温度时间序列预测
R语言神经网络模型预测车辆数量时间序列
R语言中的BP神经网络模型分析学生成绩
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
R语言实现拟合神经网络预测和结果可视化
用R语言实现神经网络预测股票实例
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类