TensorFlow:当我们微调预训练模型的某些层时,我们是否排除范围或操作?

时间:2017-01-09 05:38:28

标签: python machine-learning tensorflow deep-learning tf-slim

当我指的是一个网络层时,我对范围或操作的含义感到很困惑。如果我想微调网络的最后一个softmax层,我是否可以使用范围,操作或变量来处理它?所有这些术语之间有什么区别?

我看过TF-slim演练ipynb教程,以下是他们如何排除一些微调范围:

def get_init_fn():
    """Returns a function run by the chief worker to warm-start the training."""
    checkpoint_exclude_scopes=["InceptionV1/Logits", "InceptionV1/AuxLogits"]

    exclusions = [scope.strip() for scope in checkpoint_exclude_scopes]

    variables_to_restore = []
    for var in slim.get_model_variables():
        excluded = False
        for exclusion in exclusions:
            if var.op.name.startswith(exclusion):
                excluded = True
                break
        if not excluded:
            variables_to_restore.append(var)

    return slim.assign_from_checkpoint_fn(
      os.path.join(checkpoints_dir, 'inception_v1.ckpt'),
      variables_to_restore)

他们似乎排除了某些范围["InceptionV1/Logits", "InceptionV1/AuxLogits"],从中排除了每个变量以及他们想要排除的范围,并且包含了未列入variable_to_restore范围的变量。可以说范围实际上是指层吗?

如果是这样,这是一个令人困惑的部分:变量与op的相关性是什么?我的印象是,使用op.name来查找范围名称,例如["InceptionV1/Logits", "InceptionV1/AuxLogits"],例如,通过编写[op.name for op in g.get_operations()]。如果是这种情况,为什么变量仍然有op.name

如何找到范围名称来选择某些层进行微调?我认为这对于解决我的困惑非常重要。

谢谢大家的帮助。

0 个答案:

没有答案