基于深度学习框架pytorch构造深度学习循环神经网络模型RNN和LSTM
深度学习框架pytorch
当我们开始尝试做一个深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的作用,每个深度学习研究者不需要写大量的重复代码,它能够提高我们的开发效率和速度。有许多优秀的深度学习框架,比如Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。
深度学习框架——pytorch
pytorch深度学习框架,相对其它框架来说,它更加灵活,支持动态图,而且提供了Python接口。它是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是其它深度学习框架所不支持的。
循环神经网络——RNN
我们知道神经网络的灵感来源于人类的大脑,对于我们人类而言,我们在以前经历的事情会在大脑中留下深刻的印象,这样我们往往能够重拾记忆。而循环神经网络的出现让人们看到了希望,它在序列问题,以及自然语言理解等领域取得了巨大的成功。
循环神经网络的提出便是基于记忆模型的想法,期望循环神经网络能够记住前面出现的特征,并且能够依据前面的特征推断后面的结果,而且整体的网络不断循环,所以它叫做循环神经网络。
循环神经网络的基本结构很简单,它就是将网络的输出保存到一个记忆单元中,这个记忆单元和下一次的输入一起进入神经网络中,它的结构如下所示:
循环神经网络——RNN
这是最基本的循环神经网络RNN,我们可以看到网络输入的时候会联合记忆单元一起作为输入,网络不仅输出结果,还会将结果保存到记忆单元中。
虽然这样的RNN神经网络结构能够记忆之前的情景,但是它和人一样,记忆力并不是无限的,它也存在遗忘性,所以网络往往不能记忆很长时间的信息,而且随着时间跨度越来越大,RNN也越来越难以学习这些信息。
循环神经网络——LSTM
后来在RNN基础上设计了新的循环神经网络LSTM,这个新的循环神经网络LSTM不仅能够解决短时记忆的问题,而且能够在一定的程度上解决长时间依赖的问题。
循环神经网络——LISTM
LSTM和RNN一样都是链式循环结构,它由三个门来控制,分别为输入门、遗忘门、输出门。其中最主要的就是遗忘门,它决定了之前的哪些记忆被保留,而哪些记忆被去掉,遗忘门使得LSTM具有了长时记忆的功能。
基于pytorch构建LSTM
import torch from torch.autograd import Variable from torch import nn lstm_seq = nn.LSTM(50, 100, num_layers=2) h_init = Variable(torch.randn(2, 3, 100)) c_init = Variable(torch.randn(2, 3, 100)) out, (h, c) = lstm_seq(lstm_input, (h_init, c_init))
如上所示我们只使用了几行代码就构建了具有两层的循环神经网络LSTM,这就是框架的优势所在,其中这个循环神经网络输入层的维度是50,而输出层的维度是100。
深度学习框架的出现降低了入门的门槛,我们不需要从复杂的神经网络开始编代码,可以根据需要选择已有的模型,通过训练得到模型参数,这就是深度学习框架的优势所在。