使用output_layer = pool_3运行label_image时出错

时间:2015-12-25 20:58:23

标签: tensorflow

图像识别教程中的张量流练习建议运行c ++示例 --output_layer=pool_3。我试过运行它并收到错误:

$ bazel-bin/tensorflow/examples/label_image/label_image --output_layer=pool_3

I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4
W tensorflow/core/common_runtime/executor.cc:1076] 0x558ae6a5d210 Compute status: Invalid argument: input must be 2-dimensional
     [[Node: top_k = TopK[T=DT_FLOAT, k=5, _device="/job:localhost/replica:0/task:0/cpu:0"](Const/_0)]]
E tensorflow/examples/label_image/main.cc:311] Running print failed: Invalid argument: input must be 2-dimensional
     [[Node: top_k = TopK[T=DT_FLOAT, k=5, _device="/job:localhost/replica:0/task:0/cpu:0"](Const/_0)]]

我错过了什么?

1 个答案:

答案 0 :(得分:3)

这里的问题是image recognition tutorial中的TensorFlow代码需要在--output_layer=pool_3选项起作用之前进行额外修改:

  

可以通过在C ++ API示例中设置--output_layer=pool_3,然后更改输出张量处理来指定。

要更改输出张量处理,您需要修改代码below this line in label_image/main.ccPrintTopLabels()函数调用GetTopLabels(),它将单个2-D(批处理x类)张量假设为tf.nn.softmax()的输出,其中包含批处理中标签的概率分布图像 - 并使用tf.nn.top_k()操作构建一个小的TensorFlow图。 pool_3图层输出四维(批x高x宽x深)张量,需要额外处理。

附加处理留给读者练习。但是,您可以尝试一些事项:

  • 将输出重新整形为二维(批量x要素)矩阵,并训练完全连接的图层(或更多)以识别您自己的训练数据中的要素。

  • 通过沿深度维度切片,并使用tf.image.encode_png()操作将切片编码为图像,可视化池化图层的输出。

N.B。由于文档更好,我提供了Python文档的链接,而不是相应的C ++ API。您可能会发现(更多!)更容易修改Python code for Inception inference