lstm需要优化的参数_LSTM的物理结构和一些细节
![](/assets/blank.gif)
![](/assets/blank.gif)
这个是网上看的最多的图了,但是在理解lstm的应用过程中的时候这个图带来了不少麻烦。
![](/assets/blank.gif)
展开之后实际的物理结构是这样的,1、2图同颜色的点代表了同一个东西;
问题1:
![](/assets/blank.gif)
这里的输入xt和ht是怎么结合的?比如:
![](/assets/blank.gif)
这块儿很多地方都没讲清楚,实际上就是concat,直接concat起来了:
![](/assets/blank.gif)
问题2:LSTM的权重到底是啥样的?
这里直接以tf.keras的代码为例子看看就造了:
def build_model(look_back: int, batch_size: int=1) -> Sequential:model = Sequential()model.add(LSTM(units=128,activation='relu',batch_input_shape=(batch_size, look_back, 1),stateful=True,return_sequences=False))model.add(Dense(1, activation='linear'))model.compile(loss='mean_squared_error', optimizer='adam')return model
model = build_model(28, batch_size=1)
首先,当我们的units=128的时候,LSTM的最终输出(仅考虑最后一个时间步输出,并且不考虑sequence的输出)就是128维的向量定下来了,对应的输出就是:
![](/assets/blank.gif)
这里的最后一个ht的部分,注意这个ht既可以作为最终的输出,也是时间中的hidden state输入到下一个时间点的前向传播中去。
model.layers[0].trainable_variables
![](/assets/blank.gif)
Param <tf.Variable 'lstm_4/lstm_cell_4/recurrent_kernel:0' shape=(128, 512) dtype=float32, numpy=
array([[ 3.0333996e-03, 1.4155725e-02, -3.9381277e-02, ...,
4.0887762e-02, -3.1605218e-02, -1.7439183e-02],
[-5.2204579e-02, 1.6296864e-02, 4.4382092e-02, ...,
2.1501739e-02, 5.1224865e-02, -5.1180001e-02],
[ 1.9754471e-02, -2.7741276e-02, -3.0992866e-02, ...,
1.8080823e-02, -2.1589132e-02, 8.2989247e-04],
...,
[-2.9214425e-05, -2.5351198e-02, -4.1916996e-02, ...,
-5.0040476e-02, -1.1436570e-02, 4.7302879e-02],
[-4.4846401e-02, 3.3629253e-03, 1.7752033e-02, ...,
-4.5454025e-02, -8.5912934e-03, -1.8942051e-02],
[-1.8914735e-02, -4.9705409e-02, -5.3823508e-02, ...,
3.6144644e-02, -2.1415317e-02, 1.5490238e-02]], dtype=float32)>:
(截图不知道怎么搞的一直上传失败)
![](/assets/blank.gif)
可以看到,LSTM层一共有3组参数,第一组是512个参数,我们的LSTM的units设置为128,因此
![](/assets/blank.gif)
![](/assets/blank.gif)
这里的四个门,每一个门对应一个dense层,将input映射为128维,4个门一共4*128=512个参数,对应的就是第1组权重,注意,这里我们的输入的维度是1,因为就是简单的序列数据,没有其它的,所以这里第一个矩阵权重为(1,512),如果是embedding的话,比如embedding的维度是100,那么就是(100,512),tensorflow.keras这里把多个门的权重合并到一起来了。。。看了半天才看明白,其实严格一点应该是 4个 1*128的小矩阵,估计是为了工程上的便利和优化直接合并到一起了;
那么第三组的权重也很好理解,就是bias,
![](/assets/blank.gif)
512个bias分别分配到这4个门的计算中;
最后是第二组权重,实际上就是
上一个时间步的ht-1到4个门的映射
![](/assets/blank.gif)
我们前面说过上一个时间步的ht-1和这个时刻的输入xt是concat的,所以应该是(128+1)*128*4 这样比较好理解,不过tf.keras的权重不是按照这样保存的就是了,所以看代码的时候会有一点疑惑,不过总算看明白了shift~
问题3 LSTM的两个dropout是drop啥?
LSTM中有两个dropout的参数:
一个是
| dropout: Float between 0 and 1. Fraction of the units to drop for the linear
| transformation of the inputs. Default: 0.
这个dropout实际上就是输入X的dropout,
![](/assets/blank.gif)
![](/assets/blank.gif)
也就是这个部分做dropout
一个是
| recurrent_dropout: Float between 0 and 1. Fraction of the units to drop for
| the linear transformation of the recurrent state. Default: 0.
![](/assets/blank.gif)
是针对于这个部分做dropout,
常规的dropout层是对LSTM最终的输出进行dropout。
问题四 :stateful LSTM 和 stateless LSTM有啥区别?
首先我们需要知道的是,我们平常大部分时候使用的LSTM都是属于stateless LSTM。
![](/assets/blank.gif)
举个例子,比如情感分析:
“我 喜欢 你”当我们把这个句子的每个词embedding之后进入上面的这个LSTM的结构,到最终的时间步后,输出结束,此时,ht作为输出接一个分类层完成任务。
这个时候,tf.keras中的LSTM默认会reset_state,也就是
![](/assets/blank.gif)
cell state和 hidden state都没有消失了。然后进入下一个句子的前向传播;
stateful LSTM则可以将当前句子的最终的cell state和hidden state的输出作为下个句子的初始的cell state和hidden state。
stateful LSTM:能让模型学习到你输入的samples之间的时序特征,适合一些长序列的预测,哪个sample在前,那个sample在后对模型是有影响的。
stateless LSTM:输入samples后,默认就会shuffle,可以说是每个sample独立,之间无前后关系,适合输入一些没有关系的样本。详细可见:
尤鱼哥:Keras之stateful LSTM全面解析+实例测试zhuanlan.zhihu.com
![](/assets/blank.gif)
很好理解了。
我们在做时间序列预测的时候可以同时考虑stateful LSTM和stateness LSTM看看哪个效果好。
lstm需要优化的参数_LSTM的物理结构和一些细节相关推荐
- lstm需要优化的参数_使用PyTorch手写代码从头构建LSTM,更深入的理解其工作原理...
这是一个造轮子的过程,但是从头构建LSTM能够使我们对体系结构进行更加了解,并将我们的研究带入下一个层次. LSTM单元是递归神经网络深度学习研究领域中最有趣的结构之一:它不仅使模型能够从长序列中学习 ...
- lstm需要优化的参数_通过Keras 构建基于 LSTM 模型的故事生成器
LSTM 网络工作示意图 什么是 LSTM 网络? LSTM (Long Short Term Memory, 长短期神经网络)是一种特殊的循环神经网络(RNN, Recurrent neural n ...
- lstm需要优化的参数_1-基于LSTM-GA 的股票价格涨跌预测模型
摘要 如何准确地进行股票预测一直是量化金融领域的重要问题.长短期记忆细胞神经网络(LSTM)的出现较好地解决了股票预测这类的复杂序列化数据学习的问题.然而前期研究结果表明单一使用该方法仍存在预测不平衡 ...
- DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优
DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优 目录 基于keras对LSTM算法进行超参数调优 1.可视化LSTM模型的loss和acc曲线
- PyTorch官方中文文档:torch.optim 优化器参数
内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...
- 【转帖】Nginx优化use参数epoll,kqueue,rtsig,eventport,poll
下图对比了poll select epoll和kqueue的性能.select和poll是一个级别的,epoll和kqueue是一个级别的,相差不多.epoll用在linux上,kqueue用在bsd ...
- DL之DNN优化技术:DNN优化器的参数优化—更新参数的四种最优化方法(SGD/Momentum/AdaGrad/Adam)的案例理解、图表可视化比较
DL之DNN优化技术:DNN优化器的参数优化-更新参数的四种最优化方法(SGD/Momentum/AdaGrad/Adam)的案例理解.图表可视化比较 目录 四种最优化方法简介 优化器案例理解 输出结 ...
- 贝叶斯优化神经网络参数_贝叶斯超参数优化:神经网络,TensorFlow,相预测示例
贝叶斯优化神经网络参数 The purpose of this work is to optimize the neural network model hyper-parameters to est ...
- 实践实战:在PoC中的Oracle 12c优化器参数推荐(含PPT)
最近,Oracle数据库优化器的产品经理 Nigel Bayliss 发布了一篇文档,介绍:Setting up the Oracle Optimizer for PoCs - 在PoC测试中优化器参 ...
最新文章
- 理解I/O Completion Port(完成端口)
- 怎么用linux的HDD存储,Linux学习的正确姿势12:Linux存储概览
- Cpp / Hash 所得字符串转成 Hex 字符串。
- 世界上没有一模一样的东西_世界上存在两根同时点燃同时燃尽一模一样的蜡烛吗?...
- ssd网络结构_封藏的SSD(Single Shot MultiBox Detector)笔记
- 1107班html大赛比赛说明 同学们需注意的事项
- 一键切换ip地址bat_震惊!FPGA配置居然一键完成!
- 医疗信息季节:在医疗行业未来的变化(继续前传)
- Halcon缺陷检测——差分
- java基础学习(4)
- 智能机器人机器人心得_你是机器人吗
- EXCEL数据比对常用函数
- Python代码——卫星天空图绘制
- [从零开始A31S]之安装虚拟机以及下载ubuntu
- 二维数组/三维数组 定义
- Juniper防火墙的HA(高可用性)配置
- MBTI职业性格测试小程序
- Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法
- 机器学习提高准确率的一些思路和技巧
- java中级工程师所需的技能_java工程师简历专业技能填写样本