我们可以在tensorflow中获取任何预训练模型的子集吗?例如,如果我们有一个预先训练的模型,可以检测545个目标,我们可以使这个模型的子集只能检测20个目标,这样就可以减少加载模型和检测过程所需的时间。
发布于 2018-02-09 19:30:53
最多只能减少仅与最后一个(输出)层相关的权重。因此,如果倒数第二层的大小是1000,那么它将减少(1000 * 545 - 1000 * 20) = 525000的参数。
但是,如果你的网络很深,这不会证明是一个很好的加速,因为你仍然需要计算除最后一层之外的所有其他层。
发布于 2018-02-09 19:35:23
你可以,但这是一个不可忽略的工作量,它不会实质上提高速度。
实际上,您需要更改的只是类预测层,您必须将其从n_featuresx545减少到n_featuresx20。通常在那个阶段你有n_features=7*7=49 (尽管它实际上取决于你使用的方法;这对于使用通常设置的更快的RCNN是正确的),所以你可以为每幅图像保存大约26k参数和8million操作(考虑每幅图像300次检测),与对象检测模型中通常涉及的数百万个参数和数十亿次操作相比,这可以忽略不计。
在不重新训练的情况下改变预测层,虽然保持训练值不是直接的,但你必须编写一段代码来手动修改网络。
https://stackoverflow.com/questions/48704066
复制相似问题