Tensorflow 中的长短期记忆 (LSTM) RNN17 Mar 2025 | 5 分钟阅读 长短期记忆 (LSTM) 是一种在深度学习领域中使用的循环神经网络 (RNN) 架构。它由 Sepp Hochreiter 和 Jurgen schmidhuber 于 1997 年提出。与标准的前馈神经网络不同,LSTM 具有反馈连接。它不仅可以处理单个数据点(例如图像),还可以处理整个数据序列(例如语音或视频)。 例如,LSTM 适用于诸如未分段的、连笔手写识别或语音识别等任务。 一个通用的 LSTM 单元由一个单元、一个输入门、一个输出门和一个遗忘门组成。单元在任意时间间隔内记住值,三个门控制信息流入和流出单元。LSTM 非常适合对未知持续时间的给定时间序列进行分类、处理和预测。 长短期记忆 (LSTM) 网络是循环神经网络的修改版本,这使得更容易记住内存中的过去数据。 ![]() 1. 输入门 - 它发现应该使用输入中的哪个值来修改内存。 Sigmoid 函数决定允许通过的值,为 0 或 1。并且 tanh 函数对通过的值进行加权,决定它们的重要性级别,范围从 -1 到 1。 ![]() 2. 遗忘门 - 它发现要从块中丢弃的细节。 一个 sigmoid 函数决定它。 它查看前一个状态 (ht-1) 和内容输入 (Xt),并为单元状态 Ct-1 中的每个数字输出一个介于 0(省略)和 1(保留)之间的数字。 ![]() 3. 输出门 - 使用块的输入和内存来决定输出。Sigmoid 函数决定允许通过的值,为 0 或 1。并且 tanh 函数决定允许通过的值,为 0,1。tanh 函数对通过的值进行加权,决定它们的重要性级别,范围从 -1 到 1,并乘以 sigmoid 的输出。 ![]() ![]() 它表示一个完整的 RNN 单元,该单元获取序列 xi 的当前输入,并输出当前隐藏状态 hi,将其传递给下一个 RNN 单元以用于我们的输入序列。LSTM 单元内部比传统的 RNN 单元复杂得多,而传统的 RNN 单元只有一个作用于当前状态(ht-1)和输入(xt)的“内部层”。 ![]() 在上图中,我们看到了一个“展开”的 LSTM 网络,它带有一个嵌入层,一个后续的 LSTM 层和一个 sigmoid 激活函数。我们认识到我们的输入,在这种情况下,电影评论中的单词,是按顺序输入的。 这些单词被输入到一个嵌入查找中。在大多数情况下,当处理文本数据语料库时,词汇量的大小异常大。 这是向量空间中单词的多维、分布式表示。这些嵌入可以使用其他深度学习技术(如 word2vec)来学习,我们可以以端到端的方式训练模型,以在教学时确定嵌入。 然后将这些嵌入输入到我们的 LSTM 层中,其中输出被馈送到 sigmoid 输出层和序列中下一个单词的 LSTM 单元。 LSTM 层我们将建立一个函数来构建 LSTM 层,以动态处理层数和大小。 该服务将获取一个 LSTM 大小列表,该列表可以根据列表的长度指示 LSTM 层的数量(例如,我们的示例将使用一个长度为 2 的列表,其中包含大小 128 和 64,指示一个两层 LSTM 网络,其中第一层大小为 128,第二层具有隐藏层大小 64)。 然后,将 Dropout 封装的 LSTM 列表传递给 TensorFlow MultiRNN 单元以将各层堆叠在一起。 损失函数、优化器和准确度最后,我们创建函数来定义我们的模型损失函数、优化器和我们的准确度。即使损失和准确度仅基于结果计算,在 TensorFlow 中,一切都是计算图的一部分。 构建图和训练首先,我们调用我们定义的每个函数来构建网络,并调用一个 TensorFlow 会话来使用小批量在预定义的 epoch 数上训练模型。在每个 epoch 结束时,我们将打印损失、训练准确度和验证准确度,以在训练模型时监视结果。 接下来,我们定义我们的模型超参数,我们将构建一个两层 LSTM 网络,其隐藏层大小分别为 128 和 64。 当模型完成训练时,我们使用 TensorFlow 保存器保存模型参数以供以后使用。 Epoch: 1/50 Batch: 303/303 Train Loss: 0.247 Train Accuracy: 0.562 Val Accuracy: 0.578 Epoch: 2/50 Batch: 303/303 Train Loss: 0.245 Train Accuracy: 0.583 Val Accuracy: 0.596 Epoch: 3/50 Batch: 303/303 Train Loss: 0.247 Train Accuracy: 0.597 Val Accuracy: 0.617 Epoch: 4/50 Batch: 303/303 Train Loss: 0.240 Train Accuracy: 0.610 Val Accuracy: 0.627 Epoch: 5/50 Batch: 303/303 Train Loss: 0.238 Train Accuracy: 0.620 Val Accuracy: 0.632 Epoch: 6/50 Batch: 303/303 Train Loss: 0.234 Train Accuracy: 0.632 Val Accuracy: 0.642 Epoch: 7/50 Batch: 303/303 Train Loss: 0.230 Train Accuracy: 0.636 Val Accuracy: 0.648 Epoch: 8/50 Batch: 303/303 Train Loss: 0.227 Train Accuracy: 0.641 Val Accuracy: 0.653 Epoch: 9/50 Batch: 303/303 Train Loss: 0.223 Train Accuracy: 0.646 Val Accuracy: 0.656 Epoch: 10/50 Batch: 303/303 Train Loss: 0.221 Train Accuracy: 0.652 Val Accuracy: 0.659 测试最后,我们在测试集上检查我们的模型结果,以确保它们与我们在训练期间观察到的结果一致。 测试准确率为 72%。这与我们的验证准确度相符,表明我们捕获了数据在数据分割中的适当分布。 INFO:tensorflow:Restoring parameters from checkpoints/sentiment.ckpt Test Accuracy: 0.717 下一个主题RNN 的训练 |
我们请求您订阅我们的新闻通讯以获取最新更新。