如何恢复不同名称但形状相同的权重Tensorflow?

时间:2017-08-10 06:43:19

标签: machine-learning tensorflow

我在Tensorflow中有多种架构。他们中的一些人分享某些部分的设计。

我想训练其中一个网络,并在另一个网络中使用相似图层的训练权重。

此时,我能够保存我想要的权重,并在具有与变量完全相似的命名约定的体系结构中重新加载它们。

但是,当权重在两个网络中具有不同的名称时,无法恢复。我对第一个网络有这个命名约定:

  • selector_network / c2w / var1

在第二个网络中我有这个:

  • joint_network / c2w / var1

除此之外,变量在形状方面相似。是否有可能在重新加载时更改名称或告诉Tensorflow在哪里适合这些变量?

编辑:我在@batzner中找到了这个脚本,允许重命名Tensorflow检查点的变量:tensorflow_rename_variables

它不起作用。我收到以下错误:

ValueError: Couldn't find 'checkpoint' file or checkpoints in given directory ./joint_pos_tagger_lemmatizer/fi/

2 个答案:

答案 0 :(得分:4)

tf.train.Saver已使用var_list参数的字典内置支持。此字典将检查点文件中对象的名称映射到要还原的变量。

如果您想使用“选择器网络”的检查点恢复“联合网络”,您可以这样做:

# var1 is the variable you want ot restore
saver = tf.train.Saver(var_list={'selector_network/c2w/var1': var1})
saver.restore(...)

如果要恢复更多变量,只需扩展字典即可。

答案 1 :(得分:0)

不过,如果您不保存的话,还有一种方法。编写一个映射函数,以便可以使用它选择正确的张量。并使用tensor.assign()从第一个网络分配值。