Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究

news/2024/10/2 16:24:14

原文链接:https://tecdat.cn/?p=37634

原文出处:拓端数据部落公众号 

本文聚焦于利用马尔可夫递归神经网络(MarkovRNN)结合树库展开建模工作。MarkovRNN 通过整合马尔可夫特性与离散随机变量来深入探索递归神经网络中的随机转换机制,旨在高效处理具有复杂潜在信息的高度结构化序列数据。在该模型中,每个时间步的离散样本均源自参数化的分类分布,且潜在信息的编码取决于所选状态对应的不同状态编码器。

一、引言

语言建模在自然语言处理领域至关重要,它对于理解和生成自然语言文本起着关键作用。传统方法在处理复杂数据结构和潜在信息时存在一定局限性,而 MarkovRNN 模型为解决这些问题提供了新的思路。

马尔可夫递归神经网络(MRNN)通过将马尔可夫性质与离散随机变量相结合来探索递归神经网络中的随机转换。提出这个模型是为了处理具有复杂潜在信息的高度结构化的序列数据。在每个时间步,离散样本从参数化的分类分布中抽取,而潜在信息则根据所选状态由不同的状态编码器进行编码。 

二、实验设置

软件环境
采用 Tensorflow 1.4.1 构建和运行模型。

数据集
选用树库作为实验数据集。以下是部分关键的数据导入代码:

 
  1.  
    from tensorflow.examples.tutorials.mnist import input_data
  2.  
    import tensorflow as tf
  3.  
    import tensorflow.contrib.slim as slim
  4.  
    import numpy as np
  5.  
    import reader
 

三、模型构建

(一)配置参数
定义了一个配置类(Config),其中涵盖了模型训练和运行的关键参数,如初始化规模(init_scale)、最大训练轮数(max_epoch)、批量大小(batch_size)等。

 
  1.  
     
  2.  
    init_scale = 0.2
  3.  
    max_epoch = 50
  4.  
    max_max_epoch = 50
  5.  
    batch_size = 50
  6.  
    display_step = 50
  7.  
    lr = 20.0
  8.  
    lr_decay = 0.3
  9.  
    embed_drop = 0.2
  10.  
    input_drop = 0.4
 

(二)数据处理
Input 类负责处理输入数据,对数据的批量大小、时间步数、轮次大小等进行了定义,并实现了输入数据和目标数据的生成。 

 
  1.  
    class Input(object):
  2.  
    def __init__(self, config, data, name=None):
  3.  
    self.batch_size = config.batch_size
  4.  
    self.num_steps = config.num_steps
  5.  
    self.epoch_size = ((len(data) // self.batch_size) - 1) // self.num_steps
  6.  
    self.input_data, self.targets = reader.ptb_producer(data, self.batch_size, self.num_steps, name=name)
 

(三)模型架构
Model 类构建了核心的 MRNN 模型。在模型初始化过程中,定义了如嵌入层(embedding)、输入(inputs)等变量。例如:

 
  1.  
    class Model(object):
  2.  
    def __init__(self, is_training, config, data):
  3.  
    with tf.device("/cpu:0"):
  4.  
    self.embedding = tf.get_variable("embedding", [config.vocab_size, config.input_size], dtype=tf.float32)
  5.  
    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)。

 
  1.  
    import os
  2.  
    raw_data = reader.ptb_raw_data('./data/')
  3.  
    train_data, valid_data, test_data, w2id, id2w = raw_data
  4.  
    config = Config()
 

(二)模型训练与评估
利用 TensorFlow 的 Supervisor 管理会话(session)进行模型训练。在每个训练轮次中,根据特定规则调整学习率和温度。训练完成后,进行模型验证与测试。实验结果表明,模型在处理语言建模任务方面表现出一定的性能,最终得到了相应的困惑度(perplexity)值,并绘制了训练和验证的困惑度曲线。 

 
  1.  
    initializer = tf.random_uniform_initializer(-config.init_scale,config.init_scale)
  2.  
    st_input)
 
 

 
  1.  
     
  2.  
    plt.figure()
  3.  
    plt.plot(range(1,len(ppl_train)+1),ppl_train,'b')
  4.  
    plt.show()
  5.  
    plt.figure()
  6.  
    plt.plot(range(1,len(ppl_valid)+1),ppl_valid,'r')
  7.  
    plt.show()
 

 

 
  1.  
    h = np.array(h)
  2.  
    print(h.shape)
  3.  
    h = np.array(np.split(h,2,3))
  4.  
    print(h.shape)
  5.  
    z = np.squeeze(np.array(z),[1,2])
  6.  
    print(z.shape)
  7.  
    qz = np.squeeze(np.array(qz),[1,2])
  8.  
    print(qz.shape)
  9.  
    x = np.array(x)
  10.  
    print(x.shape)
  11.  
    y = np.array(y)
  12.  
    print(y.shape)
  13.  
    logits = np.squeeze(np.array(logits),[1,2])
  14.  
    print(logits.shape)
 

(三)数据可视化
为了进一步分析模型的数据特征,进行了数据可视化操作。

这些可视化操作包括使用t - SNE算法对数据进行降维处理,并将处理后的数据绘制成散点图进行展示,同时还对部分数据的分布进行了图像展示和统计图表展示。

 
  1.  
    from sklearn.manifold import TSNE
  2.  
    start_time = time.time()
  3.  
    N = 10000
  4.  
    # h_tsne = TSNE(n_components=2).fit_transform(h[:N,1,:])
  5.  
    h_tsne = TSNE(n_components=2).fit_transform(h[0,:N,0,0,:])
  6.  
    print("time: %f" % (time.time()-start_time))
 
 

 
  1.  
    N1 = 0
  2.  
    N2 = 20
  3.  
    step=1000
  4.  
    N=10000
  5.  
    for i in range(0,N,step):
  6.  
    fig = plt.figure(figsize=[5,5])
  7.  
    plt.subplot(2,1,1)
  8.  
    plt.imshow(z[N1+i:N2+i,:].T)
  9.  
    plt.subplot(2,1,2)
  10.  
    plt.imshow(qz[N1+i:N2+i,:].T)
  11.  
    plt.savefig(URL+'/traj_'+str(i)+'.png')
  12.  
    plt.show()
 

 
  1.  
    plt.bar(np.arange(config.K), np.sum(z,0)/np.sum(z), alpha=0.8)
  2.  
    plt.savefig(URL+'/stat.png')
  3.  
    plt.show()
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

CUDA

1、GPU准备 1、查看GPU类型 GeForce RTX 30602、查看算力https://en.wikipedia.org/wiki/CUDA#GPUs_supported算力8.63、确定CUDA Runtime 支持的CUDA SDK为11.1-12.54、查看驱动的Driver Version CUDA Version 为12.3所以适用的CUDA 11.1-12.3 2、更新显卡驱动 1、下载了最新显…

碳酸锂 短线

大周期:3分钟短线:

【LLM训练系列】从零开始训练大模型之Phi2-mini-Chinese项目解读

一、前言 本文主要是在复现和实践Phi2-mini-Chinese后,简要分析下Phi2-mini-Chinese这个项目,做一个学习实战总结。 原文发布于知乎:https://zhuanlan.zhihu.com/p/718307193,转载请注明出数。 Phi2-mini-Chinese简介 Phi2-Chinese-0.2B 从0开始训练自己的Phi2中文小模型,…

第20篇 window系统安装Redis流程

1.下载 Redis for Windows Redis 官方并没有提供 Windows 版本的安装包,但你可以使用 Microsoft 维护的 Windows 版本的 Redis。你可以从以下链接下载 Redis for Windows:2.安装 Redis 运行安装程序: 双击下载的 .msi 文件,启动安装程序。 按照安装向导的提示进行安装。这里…

C++顺序结构(1)任务

1、下载并观看视频(照着做,多看几遍) https://www.jianguoyun.com/p/DWCNkNEQi8_wDBj5ptYFIAA 2、两项照着做的任务

xlam插件制作实验手册

大家来和笔者一起做一个xlam插件吧。很简单,很详细。 楔子excel支持自定义菜单栏,但是我在搜索如何制作菜单栏,以及如何制作addin文件的时候,即使是最好的例子,也只是点到为止,做了一个按钮就结束了。想要再进一步,竟然就没有合适的二手资料了。所以自然笔者就决定自己补…

极大似然估计的思想及计算[例题]

0 前言本文主要介绍极大似然估计的意义,并举出例题帮助读者理解。1 思想极大似然估计(Maximum Likelihood Estimation, MLE)是一种在统计学中估计模型参数的方法。它的基本思想是:找到一组参数值,使得在这组参数下,观测到的数据出现的概率(即似然函数)最大。假如有一个…

大模型的两个重要能力 (IF + FC)

MiniCPM https://github.com/OpenBMB/MiniCPM 面壁智能推出的大模型,在如下方面支持能出众。 推理 长文本 RAG 都是常见的能力。 其中 指令遵从(IF=instruction follow) 和 工具调用(FC = function call), 威力强大, 可以用作很多语音控制场景。MiniCPM 3.0MiniCPM 3.0 是一…