在我的一个项目中,我使用了一个公共预先训练的inception-v3模型:http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz。
我只想使用最后一个特征向量(pool_3 / _reshape:0的输出)。通过查看脚本示例classify_image.py,我可以成功地通过Deep DNN传递图像,提取瓶颈张量(bottleneck_tensor = sess.graph.get_tensor_by_name('pool_3/_reshape:0')
)并将其用于进一步的目的。
我最近看到有一个最近训练过的初始模型。培训检查点可在此处获取:http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz。
我想使用这种新的预训练而不是旧训练。但是文件格式不同。 "旧模型"使用ProtocolBuffer形式的图形def(classify_image_graph_def.pb),它很容易重复使用。 "新的"只提供检查点格式,我很难将其插入到我的代码中。
是否有一种简单的方法可以将检查点文件转换为可用于创建图形的ProtocolBuffer文件?
答案 0 :(得分:1)
您似乎必须使用freeze_graph.py
:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py
该脚本将检查点变量转换为独立GraphDef文件中的Const操作。 此脚本旨在获取GraphDef原型,SaverDef原型和存储在检查点文件中的一组变量值,并输出一个GraphDef,其中所有变量ops都转换为包含值的const ops。 变量。 当我们需要在C ++中加载单个文件时,执行此操作非常有用,尤其是在移动或嵌入式环境中,我们可能无法访问RestoreTensor操作和他们依赖的文件加载调用。
命令行用法的一个示例是:
bazel build tensorflow/python/tools:freeze_graph && \
bazel-bin/tensorflow/python/tools/freeze_graph \
--input_graph=some_graph_def.pb \
--input_checkpoint=model.ckpt-8361242 \
--output_graph=/tmp/frozen_graph.pb --output_node_names=softmax