LSTM公式原理+Keras Pytorch LSTM中参数对比+每层LSTM参数计算

Keras

输入shape:(samples,timesteps,input_dim)

  • (100,5,64)表示输入100个句子,每个句子5个单词,每个单词用一个64-dim的向量表示
  • 所以
concat = torch.cat((x1,x3),1)#(none,50,2,244)
input_dim = 2*244
timesteps = 50
#每个句子有50个单词,每个单词表示向量为488-dim

Pytorch

在这里插入图片描述

LSTM基础知识

参考:

介绍

  • LSTM采用了门控输出的方式,即三门(输入门、遗忘门、输出门)两态(Cell State长时、Hidden State短时)。其核心即Cell State

  • 在这里插入图片描述

  • 遗忘门: f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right) ft=σ(Wf[ht1,xt]+bf)

  • 输入门: i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right) it=σ(Wi[ht1,xt]+bi) C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right) C~t=tanh(WC[ht1,xt]+bC)以及t时刻cell的状态(长时): C t = f t ⋅ C t − 1 + i t ⋅ C ~ t C_{t}=f_{t} \cdot C_{t-1}+i_{t} \cdot \tilde{C}_{t} Ct=ftCt1+itC~t

  • 输出门: o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_{t}=\sigma\left(W_{o} \cdot\left[h_{t-1}, x_{t}\right]+b_{o}\right) ot=σ(Wo[ht1,xt]+bo) h t = o t ⋅ tanh ⁡ ( C t ) h_{t}=o_{t} \cdot \tanh \left(C_{t}\right) ht=ottanh(Ct)

  • 这里的 f t , i t , C t ⋯ f_t,i_t,C_t\cdots ft,it,Ct的维数都是hidden_size(cell个数) × 1 \times 1 ×1

  • https://www.wangt.cc/2021/12/lstm%E6%80%BB%E7%BB%93%E7%AC%94%E8%AE%B0/在这里插入图片描述

  • 要注意,以上都是将 h t − 1 与 x t h_{t-1}与x_t ht1xt拼接起来的,但它本来应该是这样的在这里插入图片描述

  • 为什么要提到这个呢?因为不同的深度学习框架学习的参数是不一样的,后面计算参数那部分会说

LSTM参数计算

  • 首先,经过个人实践,发现keras和pytorch的计算有一点点差异,原因就在上面说的h,x拼接那,拼接了之后偏置就只按合并的一个算,先看采取拼接的keras
  • 其实要计算的就三个公式的 σ \sigma σ和一个 t a n h tanh tanh的参数,这里的参数都不是共享的哦,都不一样,只要计算一个的,再×4即可
  • 先看一个的:
  • 在这里插入图片描述
  • 所以参数公式记为: ( d h + d x ) × d h + d h ( 这 是 偏 置 ) (d_h+d_x)\times d_h+d_h(这是偏置) (dh+dx)×dh+dh()
  • 该层所有参数为: 4 [ ( d h + d x ) × d h + d h ] 4[(d_h+d_x)\times d_h+d_h] 4[(dh+dx)×dh+dh]
  • pytorch版本/paddle版本则是 d h × d h + d x × d h + 2 d h d_h\times d_h+d_x\times d_h+2d_h dh×dh+dx×dh+2dh
  • 所有参数为: 4 [ ( d h + d x ) × d h + 2 d h ] 4[(d_h+d_x)\times d_h+2d_h] 4[(dh+dx)×dh+2dh]
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LSTM(长短期记忆网络)是一种递归神经网络,特别适合处理序列数据,如时间序列预测、文本生成等任务。在Python,我们可以使用深度学习库KerasPyTorch来构建LSTM模型并加载数据集。 以下是一个简单的LSTM数据集加载和训练的基本流程: 1. **导入库**: ```python import numpy as np from keras.datasets import imdb from keras.models import Sequential from keras.layers import Dense, LSTM ``` 2. **加载IMDB电影评论情感分析数据集**(假设数据集已经预处理好): ```python top_words = 5000 (X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=top_words) ``` `imdb.load_data()`会返回电影评论的文本和对应的标签(正面或负面评价)。 3. **预处理数据**(例如将整数编码转换为向量): ```python X_train = np.array([np.zeros((maxlen, top_words)) for _ in range(len(X_train))]) for i, sentence in enumerate(X_train): for word in sentence: if word != 0: X_train[i, word] = 1 X_test = np.array([np.zeros((maxlen, top_words)) for _ in range(len(X_test))]) for i, sentence in enumerate(X_test): for word in sentence: if word != 0: X_test[i, word] = 1 ``` 4. **创建LSTM模型**: ```python model = Sequential() model.add(LSTM(128, input_shape=(maxlen, top_words))) model.add(Dense(1, activation='sigmoid')) # 输出层,用于二分类问题 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) ``` 5. **训练模型**: ```python model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

universe_1207

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值