Python 如何在LSTM中实现Tensorflow批量规范化

Python 如何在LSTM中实现Tensorflow批量规范化,python,tensorflow,neural-network,lstm,rnn,Python,Tensorflow,Neural Network,Lstm,Rnn,我当前的LSTM网络如下所示 rnn\u cell=tf.contrib.rnn.basicrncell(num\u units=cell\u SIZE) init_s=rnn_cell.zero_状态(batch_size=1,dtype=tf.float32)#第一个隐藏状态 输出,最终=tf.nn.dynamic( rnn#U单元,您选择的单元 tf#x,#输入 初始状态=初始状态,初始隐藏状态 time_major=False,#False:(批次,时间步,输入);True:(时间步,批

我当前的LSTM网络如下所示

rnn\u cell=tf.contrib.rnn.basicrncell(num\u units=cell\u SIZE)
init_s=rnn_cell.zero_状态(batch_size=1,dtype=tf.float32)#第一个隐藏状态
输出,最终=tf.nn.dynamic(
rnn#U单元,您选择的单元
tf#x,#输入
初始状态=初始状态,初始隐藏状态
time_major=False,#False:(批次,时间步,输入);True:(时间步,批次,输入)
)
#将完全连接层的三维输出重塑为二维
outs2D=tf.重塑(输出,[-1,单元格大小])
net\u outs2D=tf.layers.density(outs2D,输入大小)
#重塑为三维
outs=tf.重塑(净outs2D、[-1、时间步长、输入大小])
通常,我应用批处理规范化。但我不确定这是否适用于LSTM网络

b1=tf.layers.batch_归一化(输出,动量=0.4,训练=True)
d1=tf.layers.dropout(b1,比率=0.4,训练=真)
#将完全连接层的三维输出重塑为二维
outs2D=tf.重塑(d1,[-1,单元大小])
net\u outs2D=tf.layers.density(outs2D,输入大小)
#重塑为三维
outs=tf.重塑(净outs2D、[-1、时间步长、输入大小])
基于此:“层规范化”-吉米·雷巴、杰米·瑞安·基罗斯、杰弗里·辛顿

Tensorflow现在配备了一个LSTM单元,该单元具有层规范化和经常性丢失


查找文档。

如果您想对RNN(LSTM或GRU)使用批处理规范,您可以签出,或从中阅读完整说明

然而,在序列数据中,层规范化比批量规范化有更多的优势。具体而言,“批量标准化的效果取决于最小批量,如何将其应用于循环网络并不明显”(来自论文)


对于层规范化,它规范化每个层内的总和输入。您可以查看GRU单元的层标准化:

在上面的链接之后,有一个bn for lstm的实现,它还没有被拉入master。