在尝试使用记录的here中的基本LSTM单元复制Tensorflow中LSTM单元格的权重时,我偶然发现了trainable_weights和trainable_variables属性。
Source code对于像我这样遗憾的菜鸟来说并没有真正的信息。尽管如此,一些实验确实产生了以下信息: 两者都具有完全相同的布局,是长度为2的列表,其中第一个条目是tf.Variable形状:(2 * num_units,4 * num_units),列表的第二个条目是形状的(4 * num_units, ),其中num_units是初始化BasicLSTMCell的num_units。 对我来说直观的猜测是,第一个列表项是lstm的四个内部层的权重的串联,第二个项是各个偏差的串联,显然符合这些的预期大小。
现在的问题是,这些之间是否存在任何差异?我假设它们可能只是从rnn_cell类继承这些内容的结果?
答案 0 :(得分:2)
来自Layer
继承自的RNNCell
类的源代码:
@property
def trainable_variables(self):
return self.trainable_weights
见here。 RNN类似乎没有覆盖这个定义 - 我认为它适用于具有可训练变量的特殊层类型,这些变量并不完全符合“权重”。我会想到批量标准化,但遗憾的是我在该源代码中找不到trainable_variables
的任何提及(GraphKeys.TRAINABLE_VARIABLES
除外)。