RNN是为了处理序列数据而生,能够顺序获取序列之间的关系,但是也存在处理过长序列会引起梯度消失、梯度爆炸,信息丢失问题。
为了解决RNN的问题,LSTM就诞生了,LSTM主要是通过遗忘门,输入门,输出门来解决这些问题。
遗忘门主要是来控制记住什么信息,忘记什么信息。比如我今天下午去游泳,对于泳字来说只有游字是重要的,前面的几个字不重要,这时遗忘门就要告知泳字前面几个字是不重要的。
输入门主要是用来确定当前时刻的输入有哪些信息保存下来,比如我今天下午去游,对于此时的输入来说我今天下午去是不需要的只要把游字保存下来。
遗忘门+输入门就等于把序列前期保存的记忆和当前的记忆相加,保存在一起
输出门就是控制(遗忘门+输入门)的输出结果有多少输出到当前状态,成为下个字的输入,比如(遗忘门+输入门)的输出结果是我下午去游,通过输出门来决定是传我下午去游这几个字还是传游这个字去到下一个字当输入,即Ht
循环神经网络学习笔记
RNN简单视频学习笔记:
这个代码讲解应该放到LSTM讲解之后进行最合适,因为这个代码讲解例子是基于LSTMCELL的,其实就是证明遗忘门、输入门、输出门的作用。证明LSTM能记住应该记住的,忘记应该忘记的。
LSTM_Minist单层静态动态代码学习笔记:
主要说明动态RNN和静态RNN的在代码上的区别,调试跟踪代码没花多少时间,但是查相应API的用法花了小半天。
LSTM_Minist多层静态动态代码讲解学习笔记:
所谓多层就是叠加多层LSTMCELL,即可以加GRUCELL也可以加LSTMCELL,这样叠加了之后256个CELL,Minist数据集训练出来的精度竟然达到100%。
LSTM_Minist双向静态动态代码讲解学习笔记:
双向的意思就正向计算一次,反向计算一次,两者叠加以提升模型精度。
以上三个代码视频调试跟踪没什么多花时间,但是查找具体API的用法,尤其是参数的用法花的时间是调试跟踪的几倍。为什么老师不在视频中直接说呢,老师回复说API用法几K,参数量众多,这样讲能记住多少呢,还不如在用的时候去查书呢,仔细想想也的确是这个道理。
RNN编歌视频学习笔记 :
个人认为最难的就是数据准备工作,其他搭建模型、训练模型、使用模型的代码与CNN、FCN类似除了RNN自己的API。
数据准备工作的代码理解花了我将近半天的时间,最主要是花在了Counter、map、dict、zip、lambda这些python语法的理解上,前期对python的并不熟悉,只是花了一天的时间把零基础入门编程的视频给过了一遍,到了现在才认真结合当前代码中的用法把相关的视频又重看了一遍。
数据准备工作最为核心的代码就是此行,
wordlabel = get_ch_lable_v(training_file,word_num_map)
理解了get_ch_lable_v的作用及运行机制,也就把数据准备工作如合运行搞懂了。