tensorflow基本lstm_cell中trainable_weights和trainable_variables有什么区别?

LJK*_*JKS 7 lstm tensorflow

在尝试使用此处记录的基本 LSTM 单元在 Tensorflow 中复制 LSTM 单元的权重时,我偶然发现了 trainable_weights 和 trainable_variables 属性。

可悲的是,源代码对于像我这样的菜鸟来说并没有真正提供信息。不过,一些实验确实产生了以下信息:两者都具有完全相同的布局,都是长度为 2 的列表,其中第一个条目是 tf.Variable 形状:(2*num_units, 4*num_units),第二个列表条目的形状为 (4*num_units,),其中 num_units 是初始化 BasicLSTMCell 的 num_units。我现在的直觉猜测是,第一个列表项是 lstm 的四个内部层的权重的串联,第二个项目是各个偏差的串联,显然符合这些偏差的预期大小。

现在的问题是,这些之间实际上是否有任何区别?我认为它们可能只是从 rnn_cell 类继承这些的结果?

xdu*_*ch0 7

从继承自的Layer类的源代码RNNCell

@property
def trainable_variables(self):
    return self.trainable_weights
Run Code Online (Sandbox Code Playgroud)

这里。RNN 类似乎没有覆盖这个定义——我认为它适用于具有可训练变量的特殊层类型,这些变量并不完全符合“权重”的要求。我会想到批量规范化,但不幸的是我trainable_variables在那个源代码中找不到任何提及(除了GraphKeys.TRAINABLE_VARIABLES不同)。