2

ネットワークのレイヤーについて言及しているときに、スコープまたは操作が何を意味するのかについて、私はかなり混乱しています。ネットワークの最後のソフトマックス層を微調整したい場合、スコープ、操作、または変数に移動して作業しますか? これらすべての用語の違いは何ですか?

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でしょうか?

微調整する特定のレイヤーを選択するには、スコープ名をどのように見つける必要がありますか? これは私の混乱を解消する上で非常に重要になると思います。

ご協力ありがとうございました。

4

0 に答える 0