ネットワークのレイヤーについて言及しているときに、スコープまたは操作が何を意味するのかについて、私はかなり混乱しています。ネットワークの最後のソフトマックス層を微調整したい場合、スコープ、操作、または変数に移動して作業しますか? これらすべての用語の違いは何ですか?
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
でしょうか?
微調整する特定のレイヤーを選択するには、スコープ名をどのように見つける必要がありますか? これは私の混乱を解消する上で非常に重要になると思います。
ご協力ありがとうございました。