做网站有兼职的吗,中信建设有限公司简介,wordpress精简主题,本机iis发布网站后台管理LSTM 前言网络架构总线遗忘门记忆门记忆细胞输出门 模型定义单个LSTM神经元的定义LSTM层内结构的定义 模型训练模型评估代码细节LSTM层单元的首尾的处理配置Tensorflow的GPU版本 前言
LSTM作为经典模型#xff0c;可以用来做语言模型#xff0c;实现类似于语言模型的功能可以用来做语言模型实现类似于语言模型的功能同时还经常用于做时间序列。由于LSTM的原版论文相关版权问题这里以colah大佬的博客为基础进行讲解。之前写过一篇Tensorflow中的LSTM详解但是原理部分跟代码部分的联系并不紧密实践性较强但是如果想要进行更加深入的调试就会出现原理性上面的问题因此特此作文解决这个问题想要用LSTM这个有趣的模型做出更加好的机器学习效果。
网络架构 这张图展示了LSTM在整体结构下面就开始分部分介绍中间这个东东。
总线 这条是总线可以实现神经元结构的保存或者更改如果就是像上图一样一条总线贯穿不做任何改变那么就是不改变细胞状态。那么如果想要改变细胞状态怎么办可以通过门来实现这里的门跟高中生物中学的神经兴奋阈值比较像用数学来表示就是sigmoid函数或者其他的激活函数当门的输入达到要求门就会打开允许当前门后面的信息“穿过”门改变主线上面传递的信息如果把每一个神经元看成一个时间节点那么从上一个时间节点传到下一个时间节点过程中的门的开启与关闭就实现了时间序列数据的信息传递。
遗忘门 首先是遗忘门这个门的作用是决定从上一个神经元传输到当前神经元的数据丢弃的程度如果经过sigmoid函数以后输出0表示全部丢弃输出1表示全部保留这个层的输入是旧的信息和当前的新信息。 σ \sigma σsigmoid函数 W f W_f Wf权重向量 b f b_f bf偏置项决定丢弃上一个时间节点的程度如果是正数表示更容易遗忘如果是负数表示比较容易记忆 h t − 1 h_{t-1} ht−1上一个时刻的输入 x t x_t xt当前层的输入 记忆门 接下来是记忆门这个门决定要记住什么信息同时决定按照什么程度记住上一个状态的信息。 i t i_t it在时间步t时刻的输入门激活值计算方法跟上面的遗忘门是一样的只是目的不一样这里是记忆 C ~ t \tilde{C}_{t} C~t表示上一个时刻的信息和当前时刻的信息的集合但是是规则化到[-11]这个范围内了的 记忆细胞 有了上面的要记忆的信息和要丢弃的信息记忆细胞的功能就可以得到实现用 f t f_t ft这个标量决定上一个状态要遗忘什么用 i t i_t it这个标量决定上一个状态要记住什么以及当前状态的信息要记住什么。这样就形成了一个记忆闭环了。
输出门 最后在有了记忆细胞以后不仅仅不要将当前细胞状态记住还要将当前的信息向下一层继续传输实现公式中的状态转移。 o t o_t ot跟前面的门公式都一样但是功能是决定输出的程度 h t h_t ht将输出规范到[-11]的区间这里有两个输出的原因是在构建LSTM网络的时候需要有纵向向上的那个 h t h_t ht然而在当前层的LSTM的神经元之间还是首尾相接的。 模型定义
单个LSTM神经元的定义 # 定义单个LSTM单元
# 定义单个LSTM单元
class My_LSTM(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(My_LSTM, self).__init__()self.input_size input_sizeself.hidden_size hidden_sizeself.output_size output_size# 初始化门的权重和偏置,由于每一个神经元都有自己的偏置所以在定义单元内部定义self.Wf nn.Parameter(torch.Tensor(input_size hidden_size, hidden_size))self.bf nn.Parameter(torch.Tensor(hidden_size))self.Wi nn.Parameter(torch.Tensor(input_size hidden_size, hidden_size))self.bi nn.Parameter(torch.Tensor(hidden_size))self.Wo nn.Parameter(torch.Tensor(input_size hidden_size, hidden_size))self.bo nn.Parameter(torch.Tensor(hidden_size))self.Wg nn.Parameter(torch.Tensor(input_size hidden_size, hidden_size))self.bg nn.Parameter(torch.Tensor(hidden_size))# 初始化输出层的权重和偏置self.W nn.Parameter(torch.Tensor(hidden_size, output_size))self.b nn.Parameter(torch.Tensor(output_size))# 用于计算每一种权重的函数def cal_weight(self, input, weight, bias):return F.linear(input, weight, bias)# x是输入的数据,数据的格式是(batch, seq_len, input_size)包含的是batch个序列每个序列有seq_len个时间步每个时间步有input_size个特征def forward(self, x):# 初始化隐藏层和细胞状态h torch.zeros(1, 1, self.hidden_size).to(x.device)c torch.zeros(1, 1, self.hidden_size).to(x.device)# 遍历每一个时间步for i in range(x.size(1)):input x[:, i, :].view(1, 1, -1) # 取出每一个时间步的数据# 计算每一个门的权重f torch.sigmoid(self.cal_weight(input, self.Wf, self.bf)) # 遗忘门i torch.sigmoid(self.cal_weight(input, self.Wi, self.bi)) # 输入门o torch.sigmoid(self.cal_weight(input, self.Wo, self.bo)) # 输出门C_ torch.tanh(self.cal_weight(input, self.Wg, self.bg)) # 候选值# 更新细胞状态c f * c i * C_# 更新隐藏层h o * torch.tanh(c) # 将输出标准化到-1到1之间output self.cal_weight(h, self.W, self.b) # 计算输出return output
LSTM层内结构的定义
class My_LSTMNetwork(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(My_LSTMNetwork, self).__init__()self.hidden_size hidden_sizeself.lstm My_LSTM(input_size, hidden_size) # 使用自定义的LSTM单元self.fc nn.Linear(hidden_size, output_size) # 定义全连接层def forward(self, x):h0 torch.zeros(1, x.size(0), self.hidden_size).to(x.device)c0 torch.zeros(1, x.size(0), self.hidden_size).to(x.device)out, _ self.lstm(x, (h0, c0)) # LSTM层的前向传播out self.fc(out[:, -1, :]) # 全连接层的前向传播return out
模型训练
history model.fit(trainX, trainY, batch_size64, epochs50, validation_split0.1, verbose2)
print(compilation time:, time.time()-start)模型评估
为了更加直观展示这里用画图的方法进行结果展示。
fig3 plt.figure(figsize(20, 15))
plt.plot(np.arange(train_size1, len(dataset)1, 1), scaler.inverse_transform(dataset)[train_size:], labeldataset)
plt.plot(testPredictPlot, g, labeltest)
plt.ylabel(price)
plt.xlabel(date)
plt.legend()
plt.show()代码细节
LSTM层单元的首尾的处理 首部由于第一个节点不用接受来自上一个节点的输入不需要有输入当然也有一些是添加标识。 尾部由于已经进行到当前层的最后一个节点因此输出只需要向下一层进行传递而不用向下一个节点传递添加标识也是可以的。
配置Tensorflow的GPU版本
这一篇写的比较好,我自己的硬件环境如下图所示需要的可以借鉴一下当然也可以在我提供的代码链接直接用我给的environment.yml一键构建环境。 文章转载自: http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn http://www.morning.prfrb.cn.gov.cn.prfrb.cn http://www.morning.cfqyx.cn.gov.cn.cfqyx.cn http://www.morning.bqmdl.cn.gov.cn.bqmdl.cn http://www.morning.hsdhr.cn.gov.cn.hsdhr.cn http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn http://www.morning.psxwc.cn.gov.cn.psxwc.cn http://www.morning.bncrx.cn.gov.cn.bncrx.cn http://www.morning.cfmrb.cn.gov.cn.cfmrb.cn http://www.morning.txqgd.cn.gov.cn.txqgd.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.khfk.cn.gov.cn.khfk.cn http://www.morning.ryxyz.cn.gov.cn.ryxyz.cn http://www.morning.xyyplp.cn.gov.cn.xyyplp.cn http://www.morning.rkxk.cn.gov.cn.rkxk.cn http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn http://www.morning.wjndl.cn.gov.cn.wjndl.cn http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn http://www.morning.yrnll.cn.gov.cn.yrnll.cn http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.rpwm.cn.gov.cn.rpwm.cn http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn http://www.morning.yqpck.cn.gov.cn.yqpck.cn http://www.morning.dpnhs.cn.gov.cn.dpnhs.cn http://www.morning.rpwck.cn.gov.cn.rpwck.cn http://www.morning.bwfsn.cn.gov.cn.bwfsn.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.tndxg.cn.gov.cn.tndxg.cn http://www.morning.qrmry.cn.gov.cn.qrmry.cn http://www.morning.rmryl.cn.gov.cn.rmryl.cn http://www.morning.qbnfc.cn.gov.cn.qbnfc.cn http://www.morning.bpwdc.cn.gov.cn.bpwdc.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.zplzj.cn.gov.cn.zplzj.cn http://www.morning.xsctd.cn.gov.cn.xsctd.cn http://www.morning.phxns.cn.gov.cn.phxns.cn http://www.morning.kzrbd.cn.gov.cn.kzrbd.cn http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn http://www.morning.pkpqh.cn.gov.cn.pkpqh.cn http://www.morning.dnls.cn.gov.cn.dnls.cn http://www.morning.nqmwk.cn.gov.cn.nqmwk.cn http://www.morning.rnjgh.cn.gov.cn.rnjgh.cn http://www.morning.ntqgz.cn.gov.cn.ntqgz.cn http://www.morning.jygsq.cn.gov.cn.jygsq.cn http://www.morning.lggng.cn.gov.cn.lggng.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.llyqm.cn.gov.cn.llyqm.cn http://www.morning.lxmmx.cn.gov.cn.lxmmx.cn http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn http://www.morning.mrbmc.cn.gov.cn.mrbmc.cn http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.ckcjq.cn.gov.cn.ckcjq.cn http://www.morning.fdrb.cn.gov.cn.fdrb.cn http://www.morning.nynlf.cn.gov.cn.nynlf.cn http://www.morning.hrydl.cn.gov.cn.hrydl.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.bftqc.cn.gov.cn.bftqc.cn http://www.morning.kscwt.cn.gov.cn.kscwt.cn http://www.morning.rtlth.cn.gov.cn.rtlth.cn http://www.morning.xdqrz.cn.gov.cn.xdqrz.cn http://www.morning.csgwd.cn.gov.cn.csgwd.cn http://www.morning.qgmbx.cn.gov.cn.qgmbx.cn http://www.morning.qtrlh.cn.gov.cn.qtrlh.cn http://www.morning.cjsnj.cn.gov.cn.cjsnj.cn http://www.morning.rfrnc.cn.gov.cn.rfrnc.cn http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn http://www.morning.dkslm.cn.gov.cn.dkslm.cn http://www.morning.xcszl.cn.gov.cn.xcszl.cn http://www.morning.ltspm.cn.gov.cn.ltspm.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.pngdc.cn.gov.cn.pngdc.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.c7495.cn.gov.cn.c7495.cn http://www.morning.lwbhw.cn.gov.cn.lwbhw.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn