如何在张量流中使用预训练的对象检测?

时间:2019-10-17 21:09:30

标签: python-3.x tensorflow deep-learning object-detection

如何在我的Tensorflow项目中使用预训练网络的权重? 我知道一些有关此的理论信息,但没有有关张量流编码的信息。

1 个答案:

答案 0 :(得分:0)

正如@Matias Valdenegro在评论中指出的那样,您的第一个问题没有道理。对于第二个问题,有多种方法可以解决。您要搜索的术语是转学(TL)。 TL意味着将“知识”(基本上只是权重)从预先训练的模型转移到您的模型中。现在有几种类型的TL。

1)您将整个权重从预先训练的模型转移到模型中,并将其作为训练网络的起点。

  • 这是在您现在拥有更多数据来训练模型但又不想重新开始训练的情况下完成的。因此,您只需加载先前模型中的权重并继续训练即可。

2)您只能将一些权重从预先训练的模型转移到新模型中。

  • 这是在您拥有训练有素的模型来对5类对象进行分类的情况下完成的。现在,您要添加/删除课程。如果要添加的新类具有与现有类相似的功能,则不必从头开始重新培训整个网络。因此,除了完全连接的层(现在您具有不同的输出大小)之外,您将使用与以前的模型完全相同的体系结构来构建另一个模型。在这种情况下,您将需要从以前的模型加载卷积图层的权重并冻结它们,而仅重新训练完全连接的图层。

要在Tensorflow中执行这些操作,

1)第一种类型的TL可以通过创建具有与先前模型完全相同的体系结构的模型并使用 tf.train.Saver()。restore()< / em> 模块并继续培训。

2)第二种类型的TL可以通过为要保留权重的零件创建具有完全相同架构的模型,然后指定要在其中使用权重的名称来执行要从以前的预训练重量中加载。您可以使用参数 “ trainable = False” 来阻止Tensorflow更新它们。

我希望这会有所帮助。