转自:云栖社区
LSTM,全称为长短期记忆网络(Long Short Term Memory networks),是一种特殊的RNN,能够学习到长期依赖关系。LSTM由Hochreiter & Schmidhuber (1997)提出,许多研究者进行了一系列的工作对其改进并使之发扬光大。
了解LSTM请前往——LSTM的“前生今世”
LSTM在解决许多问题上效果非常好,现在被广泛使用。它们主要用于处理序列数据。这个博客的主要目的是让读者了解在TensorFlow中,如何实现基本的LSTM网络并掌握实现的细节。为了实现这一目标,我们把MNIST作为我们的数据集。
MNIST数据集:
MNIST数据集由手写数字及其相应标签的图像组成。我们可以借助TensorFlow的内置功能下载和读取数据:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)
数据分为三部分:
训练数据(mnist.train)-55000个图像的训练数据。
测试数据(mnist.test)-10000个图像的测试数据。
验证数据(mnist.validation)-5000个图像的验证数据。
数据形状:
接下来我们介绍一下MNIST数据集的训练数据的形状。
训练集包括55000个28×28像素的图像。这些784(28X28)像素值以单个维度向量的形式被平坦化。所有这样的55000个像素向量(每个图像一个)的集合被存储为numpy阵列的形式(55000,784)
,并被称为mnist.train.images
。
这些55000个训练图像中的每一个与表示该图像属于的类的标签相关联。一共有10个这样的类(0,1,2 ... 9)。标签以一种热编码形式的表示。因此标签被存储为numpy形状阵列的形式(55000,10)
被称为mnist.train.labels
。
为什么是MNIST?
LSTM通常用于解决复杂序列的相关问题,如NLP领域的实验:语言建模、字嵌入,编码器等。MNIST给了我们解决这类问题的机会。这里的输入数据只是一组像素值。我们可以轻松地格式化这些值,并集中应用到问题细节上。
实现
在我们没有展示代码之前,让我们先来看一下这个实验的实现方式。这会使编码部分更加容易理解。
A vanilla RNN
经常性的神经网络,通过时间展开,一般可以被图像化视为:
原文链接:
https://m.aliyun.com/yunqi/articles/202939?tk=nwzLFAxyonH%2BvDsFcz9mKUntp%2B0KR9212pFWMTksy7w%3D