【发布时间】:2017-03-19 13:50:29
【问题描述】:
尽管这里有很多关于 SO 提出重用训练过的 tensorflow 模型的问题,但使用最主流的模型之一仍然是一个挑战 Inception-v3 在自定义数据集上进行微调以仅预测某些概率单张图片。
在对该主题进行了一些研究之后(最相似的 SO 线程肯定是 Tensorflow: restoring a graph and model then running evaluation on a single image),我可以得出结论,冻结某些训练模型的 graph.pb 文件就像拥有一个圣杯,因为你没有'不需要重建图,选择要恢复的张量或其他任何东西 - 您只需调用 tf.import_graph_def 并通过 sess.graph.get_tensor_by_name 获取所需的输出层。
但问题在于,在 tensorflow 提供的示例中(例如,classify_image.py),这样的“冻结图”已经很好地准备了输入和输出点,分别如 DecodeJpeg/contents:0 和 softmax:0,您可以在其中提供您的自定义图像并从中检索答案,而在使用自定义微调模型时,您没有这么好的入口点。
例如,微调的 Inception-v3 模型冻结图将在实际卷积层之前具有 FIFOQueue、QueueDequeueMany 和类似的十几个张量,以从 TFRecord 读取批次,并且输出张量将看起来像 tower_0/logits/predictions 不可用包含批量大小的形状,因此您没有合适的点来输入新的 jpeg 图像并得到预测。
是否有任何成功案例涵盖了使用新图像批量馈送的微调模型?或者关于将 TFRecord/batch 节点的输入包更改为 JPEG 的一些想法?
附:还有一种运行预训练模型(例如 TF Serving)的替代方法,但构建一个巨大的 github 存储库,对每个其他步骤都有大量依赖项,这对我来说似乎是压倒性的。
【问题讨论】:
-
您需要加载专门构建的推理图而不是训练图。 Slim、tf.contrib.learn.Estimator、keras 和其他框架都可以让你构建一个漂亮的推理图。
标签: python tensorflow