在尝试使用此处记录的基本 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 类继承这些的结果?
从继承自的Layer类的源代码RNNCell:
@property
def trainable_variables(self):
return self.trainable_weights
Run Code Online (Sandbox Code Playgroud)
见这里。RNN 类似乎没有覆盖这个定义——我认为它适用于具有可训练变量的特殊层类型,这些变量并不完全符合“权重”的要求。我会想到批量规范化,但不幸的是我trainable_variables在那个源代码中找不到任何提及(除了GraphKeys.TRAINABLE_VARIABLES不同)。
| 归档时间: |
|
| 查看次数: |
3974 次 |
| 最近记录: |