首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带输入流水线的流量传递学习

带输入流水线的流量传递学习
EN

Stack Overflow用户
提问于 2017-01-30 14:37:26
回答 1查看 716关注 0票数 1

我想使用转移学习与谷歌的盗梦空间网络,以解决图像识别问题。我正在使用来自retrain.py示例源的TensorFlow作为灵感。

retrain.py中,将加载盗梦空间图,并使用提要dict将新图像输入到模型的输入层。但是,我已经在TFRecord文件中序列化了我的数据,并且一直在使用一个输入管道来输入我的输入,如演示的这里

因此,我有一个张量images,它在运行时以批形式返回输入数据。但我如何将这些图像输入“盗梦空间”呢?我不能使用提要dict,因为我的输入是张量,而不是NumPy数组。我的两个想法是

1)只需在每个批处理上调用sess.run(),将其转换为NumPy数组,然后使用提要块将其传递给盗梦空间。

2)用我自己的批处理输入张量替换初始空间图中的输入节点

我认为(1)会有用,但它似乎有点不雅。(2)对我来说似乎更自然,但我不能做到这一点,因为TensorFlow图只能被附加,而不能被修改。

有没有更好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-30 16:20:24

您可以实现选项(2),替换输入节点,但需要修改retrain.py才能这样做。tf.import_graph_def()函数通过将导入图中的张量重映射到目标图中的现有张量,从而支持对导入图的有限形式的修改。

retrain.py调用tf.import_graph_def()导入初始模型,其中jpeg_data_tensor成为输入数据输入的张量:

代码语言:javascript
运行
复制
bottleneck_tensor, jpeg_data_tensor, resized_input_tensor = (
    tf.import_graph_def(graph_def, name='', return_elements=[
        BOTTLENECK_TENSOR_NAME, JPEG_DATA_TENSOR_NAME,
        RESIZED_INPUT_TENSOR_NAME]))

与从导入的图形检索jpeg_data_tensor不同,您可以将其重新映射到您自己构造的输入管道中:

代码语言:javascript
运行
复制
# Output of a training pipeline, returning a `tf.string` tensor containing
# a JPEG-encoded image.
jpeg_data_tensor = ...

bottleneck_tensor, resized_input_tensor = (
    tf.import_graph_def(
        graph_def,
        input_map={JPEG_DATA_TENSOR_NAME: jpeg_data_tensor},
        return_elements=[BOTTLENECK_TENSOR_NAME, RESIZED_INPUT_TENSOR_NAME]))

无论您以前在何处输入jpeg_data_tensor,您都不再需要它,因为输入将从您构建的输入管道中读取。(请注意,您可能还需要处理resized_input_tensor .我不太熟悉retrain.py,所以可能需要进行一些重组。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41938508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档