小白循环神经网络RNN LSTM 参数数量 门单元 cell units timestep batch_size

本文介绍了RNN循环神经网络的结构,详细讲解了LSTM的参数计算,包括遗忘门、输入门、输出门和候选记忆细胞。通过实例展示了LSTM如何处理时间步长和批量大小,并探讨了不同门控结构的作用。同时,提到了LSTM相对于RNN的参数量增加以及在实际应用中的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小白循环神经网络RNN LSTM 参数数量 门单元 cell units timestep batch_size

  • RNN循环神经网络 timestep batch_size
  • LSTM及参数计算
  • keras中若干个Cell例如LSTMCell
1.RNN循环神经网络

在这里插入图片描述

先来解释一下 batch_size timestep

在这里插入图片描述

样本数据:

小明爱学习

小王爱学习

小李爱学习

小花爱学习

通常样本数据会以(batch_size, time_step, embedding_size)送入模型,对应的可以是(4,5,100)

4表示批量送入也就是(小,小,小,小)第二批是(明,王,李,花)…

5表示时间步长,一句话共5个字

100表示词嵌入的维度

H t = ϕ ( X t W x h + H ( t − 1 ) W h h + b h ) H_t = \phi(X_tW_{xh}+H_(t-1)W_{hh}+b_h) Ht=ϕ(XtWxh+H(t1)Whh+bh)

X t X_t Xt输入 假设一次输入4个字符,那么Xt的维度是4*100

W x h W_{xh} Wxh 对应的矩阵大小是 100*hidden_size

X t W x h X_tW_{xh} XtWxh输出大小即为4*hidden_size 也就是说W将词嵌入转换成隐藏层大小

$H_{t-1} $ 也就是 4*hidden_size

W h h W_{hh} Whh

### 循环神经网络 (RNN) 原理 循环神经网络是一种用于处理序列数据的神经网络架构。其核心特点是具有反馈连接,允许信息在网络内部传递并影响后续时间步的操作[^2]。 #### 结构特点 - **输入层**:接收外部输入的数据流。 - **隐藏层**:这是RNN的核心部分,在不同时间步骤间共享相同的权重参数,并通过状态向量\(h_t\)来保存上下文信息。 - **输出层**:基于当前时刻的状态以及可能的历史信息给出预测结果。 然而,标准形式下的RNN存在梯度消失或爆炸的问题,这使得它们难以捕捉非常长距离依赖关系中的模式[^1]。 ```python import torch.nn as nn class SimpleRNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleRNN, self).__init__() self.rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x, h0=None): out, hn = self.rnn(x, h0) out = self.fc(out[:, -1, :]) return out ``` ### 长短期记忆网络 (LSTM) 原理 为了克服传统RNN存在的局限性,LSTM引入了一种特殊的结构设计——细胞状态(cell state),并通过三个控机制(遗忘、输入和输出)精确控制信息流动路径[^3]: - **遗忘**:决定哪些过去的信息应该被丢弃; - **输入**:更新新的候选值进入细胞状态; - **输出**:计算最终要输出的内容; 这些特性使LSTM能够有效地记住更长时间跨度内的事件关联,从而更好地解决自然语言理解等问题[^4]。 ```python import torch.nn as nn class LSTMModel(nn.Module): def __init__(self, input_dim, hidden_dim, layer_dim, output_dim): super(LSTMModel, self).__init__() # Hidden dimensions self.hidden_dim = hidden_dim # Number of hidden layers self.layer_dim = layer_dim # Building your LSTM self.lstm = nn.LSTM( input_size=input_dim, hidden_size=hidden_dim, num_layers=layer_dim, batch_first=True ) # Readout layer self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x): # Initialize hidden state with zeros h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_() # Initialize cell state c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_() # We need to detach the hidden states to prevent exploding/vanishing gradients. out, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach())) # Index hidden state of last time step out = self.fc(out[:, -1, :]) # out.size() --> 100, 10 return out ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值