我正在从this paper重现顺序MNIST实验,在那里他们使用具有6层的递归神经网络,并在每层之后应用批量标准化。
他们似乎使用顺序标准化意味着输出不仅在批次之间标准化,而且在时间步骤之间标准化。这是一个问题,因为这意味着我无法修改BasicRNNCell
以在单元格的call
方法中执行批量规范化。要使其工作,该方法必须知道它在未来的时间步骤中输出的内容。
因此,我目前的解决方案是针对每一层:
在代码中它看起来像这样:
layer_input = network_input
for layer in range(6):
cell = BasicRNNCell(128)
layer_output, _ = tf.nn.dynamic_rnn(cell, layer_input)
layer_output = tf.layers.batch_normalization(layer_output)
layer_input = layer_output
network_output = layer_output
我的问题:为每一层展开RNN似乎是在每一层之后实现顺序批量标准化的强力方式。是否有更有效的方法,例如使用MultiRNNCell
的方法?