基于输入管道的Tensorflow迁移学习
我想用转移学习和谷歌的Inception网络来解决图像识别问题。我从TensorFlow示例源中获得灵感 在基于输入管道的Tensorflow迁移学习,tensorflow,deep-learning,Tensorflow,Deep Learning,我想用转移学习和谷歌的Inception网络来解决图像识别问题。我从TensorFlow示例源中获得灵感 在retain.py中,将加载初始图,并使用提要dict将新图像馈送到模型的输入层。但是,我在TFRecord文件中序列化了数据,并一直使用输入管道输入输入,如图所示 所以我有一个张量images,它在运行时批量返回我的输入数据。但是我怎样才能把这些图像输入到《盗梦空间》中呢?我不能使用feed dict,因为我的输入是张量,而不是NumPy数组。我的两个想法是 1) 只需在每个批上调用se
retain.py
中,将加载初始图,并使用提要dict将新图像馈送到模型的输入层。但是,我在TFRecord文件中序列化了数据,并一直使用输入管道输入输入,如图所示
所以我有一个张量images
,它在运行时批量返回我的输入数据。但是我怎样才能把这些图像输入到《盗梦空间》中呢?我不能使用feed dict,因为我的输入是张量,而不是NumPy数组。我的两个想法是
1) 只需在每个批上调用sess.run()
,将其转换为NumPy数组,然后使用提要dict将其传递给Inception
2) 用我自己的批输入张量替换Inception图中的输入节点
我认为(1)行得通,但似乎有点不雅。(2) 对我来说似乎更自然,但我不能完全做到这一点,因为TensorFlow图只能附加在后面,不能进行其他修改
有更好的方法吗?您可以实现选项(2),替换输入节点,但您需要修改retain.py
。该函数通过将导入图中的张量重新映射到目标图中的现有张量,支持对导入图进行有限形式的修改
调用tf.import\u graph\u def()
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\u data\u tensor
:
# 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\u data\u tensor
,您都不再需要它,因为输入将从您构建的输入管道中读取。(请注意,您可能还需要处理resized\u input\u tensor
,我对retain.py
不太熟悉,因此可能需要进行一些重构。)谢谢,import\u graph\u def
的input\u map
参数正是我想要的。计算和缓存瓶颈现在比使用选项(1)快很多倍。