LSTM模型
LSTM(Long Short-Term Memory)模型是一种RNN的变型,最早由Juergen Schmidhuber提出的 。经典的LSTM模型结构如下:
LSTM的特点就是在RNN结构以外添加了各层的阀门节点 。阀门有3类:遗忘阀门(forget gate),输入阀门(input gate)和输出阀门(output gate) 。这些阀门可以打开或关闭,用于将判断模型网络的记忆态(之前网络的状态)在该层输出的结果是否达到阈值从而加入到当前该层的计算中 。如图中所示,阀门节点利用sigmoid函数将网络的记忆态作为输入计算;如果输出结果达到阈值则将该阀门输出与当前层的的计算结果相乘作为下一层的输入(PS:这里的相乘是在指矩阵中的逐元素相乘);如果没有达到阈值则将该输出结果遗忘掉 。每一层包括阀门节点的权重都会在每一次模型反向传播训练过程中更新 。更具体的LSTM的判断计算过程如下图所示:
LSTM模型的记忆功能就是由这些阀门节点实现的 。当阀门打开的时候,前面模型的训练结果就会关联到当前的模型计算,而当阀门关闭的时候之前的计算结果就不再影响当前的计算 。因此,通过调节阀门的开关我们就可以实现早期序列对最终结果的影响 。而当你不不希望之前结果对之后产生影响,比如自然语言处理中的开始分析新段落或新章节 , 那么把阀门关掉即可 。(对LSTM想要更具体的了解可以戳这里)
下图具体演示了阀门是如何工作的:通过阀门控制使序列第1的输入的变量影响到了序列第4,6的的变量计算结果 。
黑色实心圆代表对该节点的计算结果输出到下一层或下一次计算;空心圆则表示该节点的计算结果没有输入到网络或者没有从上一次收到信号 。
Python中实现LSTM模型搭建
Python中有不少包可以直接调用来构建LSTM模型,比如pybrain, kears, tensorflow, cikit-neuralnetwork等(更多戳这里) 。这里我们选用keras 。(PS:如果操作系统用的linux或者mac,强推Tensorflow?。。。?
因为LSTM神经网络模型的训练可以通过调整很多参数来优化 , 例如activation函数,LSTM层数,输入输出的变量维度等,调节过程相当复杂 。这里只举一个最简单的应用例子来描述LSTM的搭建过程 。
应用实例
基于某家店的某顾客的历史消费的时间推测该顾客前下次来店的时间 。具体数据如下所示:
消费时间
2015-05-15 14:03:512015-05-15 15:32:462015-06-28 18:00:172015-07-16 21:27:182015-07-16 22:04:512015-09-08 14:59:56..
..
具体操作:
【python预测函数 用python做预测模型】1. 原始数据转化
首先需要将时间点数据进行数值化 。将具体时间转化为时间段用于表示该用户相邻两次消费的时间间隔,然后再导入模型进行训练是比较常用的手段 。转化后的数据如下:
消费间隔04418054..
..
2.生成模型训练数据集(确定训练集的窗口长度)
这里的窗口指需要几次消费间隔用来预测下一次的消费间隔 。这里我们先采用窗口长度为3,即用t-2, t-1,t次的消费间隔进行模型训练,然后用t+1次间隔对结果进行验证 。数据集格式如下:X为训练数据 , Y为验证数据 。
PS: 这里说确定也不太合适 , 因为窗口长度需要根据模型验证结果进行调整的 。
X1X2X3Y0441804418054..
..
注:直接这样预测一般精度会比较差,可以把预测值Y根据数值bin到几类,然后用转换成one-hot标签再来训练会比较好 。比如如果把Y按数值范围分到五类(1:0-20,2:20-40 , 3:40-60,4:60-80,5:80-100)上式可化为:
X1X2X3Y044180441804...
Y转化成one-hot以后则是(关于one-hot编码可以参考这里)
推荐阅读
- 大神棋牌娱乐游戏首页,大神棋牌正式版
- 腾讯net开发规范,net 腾讯
- 安卓微信聊天图片存在哪里,安卓机微信图片在哪个文件夹
- 骗子网站用的国外服务器,海外服务器做违法网站
- Python多元函数求导 python多元方程求解
- ios系统什么游戏能换充值卡,ios充值卡能给游戏内购充值吗
- 智能家居毕业设计软件,智能家居毕业设计软件开发
- go语言异步调用 go http异步
- ERP系统怎么用夹子做手机,erp系统怎么用夹子做手机支撑