尽管这里有很多问题提出了重复使用经过训练的tensorflow模型的问题,但使用最主流的模型Inception-v3罚款仍然是一个挑战调整自定义数据集以仅预测某个单一图像的概率。使用微调的Inception-v3模型来预测单个图像
在对这个话题做了一些研究之后(最相似的SO-thread肯定是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
分别在那里你可以养活你的自定义图像,并检索答案来自于,而您在使用自定义微调模型时没有这样好的切入点。
例如,微调启-V3模型冷冻图表将收到实际卷积层张量的FIFOQueue
,QueueDequeueMany
和类似的打读取来自TFRecord的与输出张量将看起来像tower_0/logits/predictions
与不可用的形状含有批量大小批次,所以你只是没有适当的点来提供一个新的JPEG图像,并得到预测。
是否有任何成功的故事报道这种批量馈送的微调模型与新图像的使用?或者,也许有关于将TFRecord/batch节点的输入包更改为JPEG的想法?
P.S.还有一种替代方式可以运行预训练模型,比如TF Serving,但是建立一个巨大的github回购库,每个其他步骤都有大量的依赖关系,这对我来说似乎压倒一切。
您需要加载专门构建的推理图,而不是训练图。 Slim,tf.contrib.learn.Estimator,keras和其他框架都允许您构建一个很好的推理图。 –