Roh*_*tam 5 python tensorflow transfer-learning tensorflow-model-garden
我正在尝试使用 Faster-RCNN 架构加载检查点并填充模型权重(Faster R-CNN ResNet50 V1 640x640准确地说,从这里开始。我正在尝试加载该网络的权重,类似于RetinaNet 示例笔记本中的操作方式,其中它们请执行下列操作:
fake_box_predictor = tf.compat.v2.train.Checkpoint(
_base_tower_layers_for_heads=detection_model._box_predictor._base_tower_layers_for_heads,
_box_prediction_head=detection_model._box_predictor._box_prediction_head,
)
fake_model = tf.compat.v2.train.Checkpoint(
_feature_extractor=detection_model._feature_extractor,
_box_predictor=fake_box_predictor
)
ckpt = tf.compat.v2.train.Checkpoint(model=fake_model)
ckpt.restore(checkpoint_path).expect_partial()
Run Code Online (Sandbox Code Playgroud)
我正在尝试为我想要使用的 Faster-RCNN 网络获取类似的检查点加载机制,但是 , 等属性_base_tower_layers_for_heads仅存_box_prediction_head在于示例中使用的架构,而不适用于其他任何东西。
我也找不到关于Checkpoint针对我的特定用例填充模型的哪些部分的文档。非常感谢有关如何解决此问题的任何帮助!
正如您所说,您遇到的主要问题是您没有想要对其进行迁移学习的层的层张量。这是 Zoo 中 Faster R-CNN ResNet50 V1 640x640 副本的原始实现的一部分。他们没有命名这些层,或者也许他们确实命名了它,但他们没有发布名称(或代码)。为了解决这个问题,你需要找出你想要保留哪些层以及你想要重新学习哪些层。您可以使用( ref )打印网络中的所有层:
[n.name for n in tf.get_default_graph().as_graph_def().node]
Run Code Online (Sandbox Code Playgroud)
可以手动添加层的名称,但要为每个节点保留默认名称。这个列表可能很长而且令人筋疲力尽,但是您需要找到张量来开始迁移学习。因此,您需要遵循该列表并尝试了解您想要冻结哪些层以及想要继续学习过程。冻结图层(参考):
if layer.name == 'layer_name':
layer.trainable = False
Run Code Online (Sandbox Code Playgroud)