【问题标题】:How to restore weights with different names but same shapes Tensorflow?如何恢复名称不同但形状相同的权重Tensorflow?
【发布时间】:2018-01-18 06:22:08
【问题描述】:

我在 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/

【问题讨论】:

    标签: machine-learning tensorflow


    【解决方案1】:

    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(...)
    

    如果你想恢复更多的变量,你只需要扩展字典。

    【讨论】:

    • 是否可以使用我们分配的名称而不是分配的变量名进行恢复?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2018-05-28
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多