第二站textRNN
在上节讲解CNN的结构中,我们知道,CNN有诸多好处,但有一个限制就是,他们的输入必须是固定size的向量。即不能为变长的。
并且CNN不能捕获过长的上下文结构,比如上节中我们提到的用卷积核的尺寸决定了词上下文的范围。
循环神经网络
如上图所示,这是循环神经网络一个神经元,经过一次Xt后输入后会产生两个输出,其中一个是ht,另一个输出(往往叫做state)又送回到神经元中,是为了与下一次的输出Xt+1结合。这样就在一定程度上保留了以往的信息。
lstm与gru
LSTM是RNN的变体,虽然理论上RNN有记忆功能,但实际训练的时候发现,它不具有记住很早以前的输入的能力。为了解决长期记忆的问题,lstm就诞生了。
如下图所示,最上一层线的信号,代表细胞状态,包括x舍弃部分原来信息,+增加新的部分信息,经过处理后作为ht输出。
因为有最上一层的细胞状态故能做到长期记忆。
Gru是lstm的简化版本。
代码部分
我们使用单层LSTM和双层的LSTM
使用双层是因为双层可以做到双向推导,即能保有从前到后的信息,又能保有从后到前的信息。
def design_model(self,hiden_size=32,with_fc=False):
input_layer=L.Input(shape=(None,),name='feature_input'