对LSTM中每个batch都初始化隐含层的理解 |
您所在的位置:网站首页 › 隐含层是什么 › 对LSTM中每个batch都初始化隐含层的理解 |
不知道有没有人和我有一样疑惑 在LSTM相关的代码中,为什么每个batch都会将隐藏层重新初始化, 这样不会把以前训练出来的参数丢掉吗?? 比如 代码来自GitHub 看了一些解释是h与c是状态,不是参数,每个batch中都需要初始化为0,LSTM 中的参数是W,b。 网络中训练的是参数,不是状态。 说真的。。。当时我没怎么看懂。。。 咨询了实验室的师兄后,我有了自己的理解
产生误解的主要原因是我对RNN和LSTM的结构理解不深入,我们通常看到RNN结构图基本都是这样的
说实话,这个图对我这种初学者并不友好 RNN实际上应该是这样的 举个例子,解释一下RNN是如何训练的 比如这里有一句话,而这句话,就是一个batch sentence=“我爱我的国” 进行句字的分词后是: 我 爱 我的 国 可以表示为4个n维的词向量,这里n我用8表示 这里有四个时间步(time_steps),每个时间步分别喂入我 爱 我的 国 四个词向量 参考RNN和LSTM数据是如何喂入的
下一句话是另一个batch,比如 “我 要 漂亮 小姐姐” 在这两个batch之间,并没有啥逻辑关系,如果我们不重新初始化 在测试的时候,batch之间的顺序会去影响 测试的结果。。。 换句话说,如果不重新初始化,两个没有什么逻辑的batch之间,会被我们人为的加上逻辑,上一句的“国”,和下一句的“我”就被联系起来了 而对于下一句的batch而言应该是一个新的开始,所以当然要初始化h和c了
也许有小伙伴要问了,这样初始化,在做文本识别的时候,句与句之间的联系,不也被初始化掉了吗? 师兄给的解释是:“一般不会这么做,一般不考虑句与句之间的联系,如果必须要考虑,那么这一段落都是一个batch中的sampler,这两句话不会分到两个batch中”
在这里偷偷挂上我的大佬级师兄Kenn7,如果他的解释不对。。。请偷偷告诉我,让我去打脸,哈哈哈
今天就分享到这里,祝大家变得更强 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |