前面学习了TensorFlow框架下的基础模型,以及一些基础知识。
下面学习一下RNN模型
1.在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的
RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出.
缺陷:原生的RNN会遇到一个很大的问题,叫做 The vanishing gradient problem for RNNs,也就是后面时间的节点对于前面时间的节点感知力下降,也就是忘事儿,这也是NN在很长一段时间内不得志的原因,网络一深就没法训练了,深度学习那一套东西暂且不表,RNN解决这个问题用到的就叫LSTM
2.输入
seq/step 时间系列
3. 多层lstm解析:(代码见https://www.tensorflow.org/tutorials/recurrent#run_the_code 有github的下载地址)
学习:http://blog.csdn.net/u014595019/article/details/52759104
第一部分,是PTBModel,也是最核心的部分,负责tf中模型的构建和各种操作(op)的定义。
第二部分,是run_epoch函数,负责将所有文本内容分批喂给模型(PTBModel)训练。
所谓dropout,就是指网络中每个单元在每次有数据流入时以一定的概率(keep prob)正常工作,否则输出0值。这是是一种有效的正则化方法,可以有效防止过拟合
4.把词典id转化成向量,也就是embedding形式
例如一个句子,“我/是/学生”,这三个词在词典中的序号分别是0,5,3,那么上面的句子就是[0,5,3]转换成向量:#[[0 0 0 0 0] [0 0 1 0 1] [0 0 0 1 1]