我在查看BasicRNNCell和static_rnn的实现。原理上我们都知道 h <- tanh(Wx + Uh + b),那么对于每一个输入的x向量(比如一共有 10 个features,那么就是一个长度为 10 的向量)。
为了加快运算,我们通常一次批量送入batch_size条数据,比如batch_size = 100, 这样一次就送入 100 条数据。
但当我查看BasicRNNCell和static_rnn的实现时,发现同一批数据不会做 h 的累加。也就是说, 向量x_{0}, x_{1}, … x_{99}没有使用 h <- tanh(Wx + Uh + b),而是直接 h <- tanh(Wx + b)(如果初始 h 值为 0)。到了第二批数据时,也就是 x_{100}, x_{101} … 才使用上一批数据得到的 h 值。而同一批里也不会逐一叠加。
我想知道是我理解错了公式,还是对于batch的使用我有什么地方其实没有搞明白?
本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。点击链接欢迎加入感兴趣的技术领域群
同一个batch的数据可以看作是相互独立的,RNN计算t时刻的数据会用到t-1时刻的隐藏层数据而不是对batch数据进行累加,batch_size=100,前向时就相当于分100次调用RNNCell。batch除了有并进行计算的作用外,还有其他作用,比如训练时决定梯度下降的方向等,选择合适batch size对训练很有效的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。