RNN基本公式

在普通神经网络中引入了隐藏状态
ht=tanh(wihxt+bih+whhht1+bhh)h_t=tanh(w_{ih}x_t+b_{ih}+w_{hh}h_{t-1}+b_{hh})

什么是Dynamic RNN

静态RNN:由于静态RNN需要预先指定seq_len,所以所有数据都必须使用同一个seq_len,即每一个batch的seq_len是一致的
动态RNN:由于利用循环次数实现了seq_len的作用,所以不同的batch可以有不同的seq_len,但是同一个batch内的seq_len还是保持一致的
Pytorch教程(2)——Dynamic RNN
注:左图和右图等价,但是右图等于把左图展开了,右图即static rnn,左图为更紧凑的dynamic rnn


为什么要用batch呢?

  • 因为batch size可以加速训练
  • 而且可以根据一个batch内的样本来更新参数,防止梯度下降的随机性,易于收敛
  • 但是更大的batch会陷入局部最优值

为什么要用Dynamic RNN

dynamic RNN可以让不同迭代传入的batch可以是长度不同的数据,但同一次迭代一个batch内部的所有数据长度仍然是固定的。例如,第一时刻传入的数据shape=[batch_size, 10],第二时刻传入的数据shape=[batch_size, 12],第三时刻传入的数据shape=[batch_size, 8]等等;一般通过为batch内不同长度的sequence进行补零操作至相同长度后,与真实seq_len一同输入模型实现。

如何在pytorch中实现Dynamic RNN

  • 输入数据处理
    每次取数据

参考来源:

动态RNN和静态RNN区别
如何理解RNN中的Batch_size?
tensor flow dynamic_rnn 与rnn有啥区别?
[莫烦 PyTorch 系列教程] 5.1 – 为什么 Torch 是动态的
训练神经网络时如何确定batch size?

分类:

技术点:

相关文章: