tensorflow - 如何在 LSTMCell 中应用层归一化
问题描述
我想在使用tf.compat.v1.nn.rnn_cell.LSTMCell
.
有一个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
解决方案
这取决于您是要在单元级别还是在层级别应用归一化 - 我不确定哪一个是正确的方法 - 论文没有指定它。这是一个较旧的实现,您可能会使用它来获得灵感。
要在单元级别进行规范化,您可能需要创建一个自定义 RNNCell并在那里实现规范化。
PS 你也可以将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())
推荐阅读
- javascript - 使用功能组件内部的泛型实例化钩子上下文
- ios - 是否可以在基于 Storyboard 的应用程序中为 iPhone 和 iPad(甚至 Catalyst)使用不同的 UITableView 样式?
- c# - C# IMemoryCache - 修改对象属性而不更新内存缓存
- typescript - 返回具有相同参数的类型对象
- c# - C# StructLayout 和处置
- android-studio - 最小化 Android Studio 中的片段
- javascript - JavaScript中的对象,对象文字和模板文字有什么区别
- r - 如何更改分组格点 xyplot 中的 x 轴值
- python - 如何在 Flask cookie 会话中安全地存储 OAuth 凭据?
- c - 理解 %*d 和 if (( scanf( "%d", &n ) != 1 ) || ( n <= 0 )) in c