我想在使用tf.compat.v1.nn.rnn_cell.LSTMCell
时将Layer Normalisation应用于递归神经网络。
有一个LayerNormalization
类,但是我应该如何在LSTMCell中应用它。
我使用tf.compat.v1.nn.rnn_cell.LSTMCell
是因为我想使用投影层。在这种情况下,我应该如何实现规范化。
class LM(tf.keras.Model):
def __init__(self, hidden_size=2048, num_layers=2):
super(LM, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm_layers = []
self.proj_dim = 640
for i in range(self.num_layers):
name1 = 'lm_lstm'+str(i)
self.cell = tf.compat.v1.nn.rnn_cell.LSTMCell(2048, num_proj=640)
self.lstm_layers.append(tf.keras.layers.RNN(self.cell, return_sequences=True, name=name1))
def call(self, x):
for i in range(self.num_layers):
output = self.lstm_layers[i](x)
x = output
state_h = ""
return x, state_h
答案 0 :(得分:0)
这取决于您是要在单元级还是在层级应用规范化-我不确定哪种规范化是正确的方法-本文未指定规范化。 Here是您可以用来启发灵感的较旧的实现。
要在单元格级别进行规范化,您可能需要创建一个custom RNNCell并在那里进行规范化。
P.S。您可能还可以将LayerNormalization应用于RNN的输出,例如如下所示,但是您需要仔细考虑它是否具有所需的效果,尤其是考虑到序列模型固有的可变形状时。
self.lstm_layers.append(tf.keras.layers.RNN(self.cell, return_sequences=True, name=name1))
self.lstm_layers.append(tf.keras.layers.LayerNormalization())