zoukankan      html  css  js  c++  java
  • LSTM的神经元个数

    目录:


    1.LSTM简单介绍

    LSTM在时间上展开
    LSTM在时间上展开

    红框从左到右,依次是:
    忘记门层: 决定从细胞状态中丢弃什么信息,通过当前时刻输入和前一个时刻输出决定
    细胞状态: 确定并更新新信息到当前时刻的细胞状态中
    输出门层: 基于目前的细胞状态决定该时刻的输出

    2.简单假设样例

    假设现有一个样本,Shape=(13,5),时间步是13,每个时间步的特征长度是5.形象点,我把一个样本画了出来:

    一个样本

    使用Keras框架添加LSTM层时,我的设置是这样的keras.layers.LSTM(10),也就是我现在设定,每个时间步经过LSTM后,得到的中间隐向量是10维(意思是5->10维),13个时间步的数据进去得到的是(13*10)的数据.

    每个时间步对应神经元个数(参数个数)一样.也就是算一个LSTM中神经元个数,算一个时间步中参与的神经元个数即可.下面将对LSTM每个计算部分进行神经元分析.

    3.神经元分析

    3.1忘记门层

    忘记门层
    忘记门层

    图中公式的是上一个状态的隐向量(已设定隐向量长度为10),为当前状态的输入(长度为5),那么的长度就是10+5=15了.为该层的参数.

    该层输出是中间隐向量的长度(10),经过激活前后的长度不变.只需要考虑里面的操作得到10维特征即可.

    是(1,15)的向量,与相乘得到(1,10)的向量,根据矩阵相乘规律,得到是(15,10)的矩阵,得到(1,10)矩阵后,与该门层偏置相加,偏置也应该有相同的形状,即是(1,10)的矩阵.

    即:该层神经元为:

    3.2细胞状态

    (1)确定更新信息过程

    确定该时刻细胞要更新的内容
    确定该时刻细胞要更新的内容

    可以看到,这里公式和前面的一样的,都是激活函数,不影响参数个数.

    同理这过程的神经元个数是:

    (2)更新过程

    细胞状态更新
    细胞状态更新

    公式中的四个值,均是前面计算得到的结果,因此该过程没有参数需要学习.

    3.3输出层

    输出门层
    输出门层

    一样的公式,神经元个数一样.即个数为:

    3.4总结

    把公式(1),(2),(3)的神经元加起来,就是该LSTM的神经元个数了.

    其实,我们可以把这个问题一般化,不看这个例子,假设你一个时间步的特征长度是n,经过该LSTM得到的长度是m,这样就可以算出该LSTM层的神经元个数为:

    4.测试

    1. from keras.layers import LSTM 
    2. from keras.models import Sequential 
    3.  
    4. time_step=13 
    5. featrue=5 
    6. hidenfeatrue=10 
    7.  
    8. model=Sequential() 
    9. model.add( LSTM(hidenfeatrue,input_shape=(time_step,featrue))) 
    10. model.summary() 

    输出是:

    1. _________________________________________________________________________________ 
    2. Layer (type) Output Shape Param #  
    3. ================================================================================= 
    4. lstm_8 (LSTM) (None, 10) 640  
    5. ================================================================================= 
    6. Total params: 640 
    7. Trainable params: 640 
    8. Non-trainable params: 0 
    9. _________________________________________________________________________________ 
    10.  

    参考:
    理解 LSTM 网络
    推荐给初学LSTM或者懂个大概却不完全懂的人

  • 相关阅读:
    hdu 5365 Run(BC 50 B题)(求四边形的个数)
    浏览器网页推断手机是否安装IOS/Androidclient程序
    外包项目总结
    HDOJ 1534 Schedule Problem 差分约束
    JavaScript入门:003—JS中的变量
    关于产品的一些思考——(三十九)瀑布流载入
    从头认识java-15.7 Map(4)-介绍HashMap的工作原理-hash碰撞(常常作为面试题)
    CodeForce 424C Magic Formulas
    HDU 3400 Line belt (三分再三分)
    oracle跨数据库跨用户訪问注意事项
  • 原文地址:https://www.cnblogs.com/wushaogui/p/9176617.html
Copyright © 2011-2022 走看看