如何在 LSTMCell 中应用层归一化
How to apply Layer Normalisation in LSTMCell
我想在使用 tf.compat.v1.nn.rnn_cell.LSTMCell
的同时将 Layer Normalisation 应用于递归神经网络。
有一个 LayerNormalization
class 但我应该如何在 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
这取决于您是想在单元格级别还是在图层级别应用归一化 - 我不确定哪一个是正确的方法 - 论文没有具体说明。 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())
我想在使用 tf.compat.v1.nn.rnn_cell.LSTMCell
的同时将 Layer Normalisation 应用于递归神经网络。
有一个 LayerNormalization
class 但我应该如何在 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
这取决于您是想在单元格级别还是在图层级别应用归一化 - 我不确定哪一个是正确的方法 - 论文没有具体说明。 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())