任务是获取a的每层输出预训练的 cnn inceptionv3 https://www.tensorflow.org/versions/master/tutorials/image_recognition/index.html模型。
例如,我向该网络提供图像,我不仅想获得其输出,还想获得每层的输出(逐层)。
为了做到这一点,我必须知道每层输出的名称。对于最后一层和前最后一层来说很容易做到:
sess.graph.get_tensor_by_name('pool_3:0')
sess.graph.get_tensor_by_name('softmax:0')
(名称 pool_3:0 和 softmax:0 在与模型相关的来源中列出)
但是,如果我不仅想获得最后一层和前最后一层的输出,还想获得前前最后一层、前前前前最后一层等该模型任何层的输出,该怎么办?
然后我必须知道图层名称。类似的问题已被询问 https://stackoverflow.com/questions/34175174/extract-features-using-pre-trained-tensorflow-cnn在 stackoverflow 上,但只有前最后层和最后一层的名称,这些名称也可以在源中的注释中找到('pool_3:0', 'softmax:0')
获取名称的明显方法是绘制模型图。但事实并非如此因为绘图工具会崩溃 https://stackoverflow.com/questions/35635131/unable-to-visualize-inception-v3-model-in-tensorboard-with-tensorflow-0-7-1。
还有一个issue https://github.com/tensorflow/tensorflow/issues/1287与此相关。
我也尝试过:
- 打印所有图形节点名称并仅使用节点名称中的信息构建图形。但节点名称非常神秘。而且节点之间的连接并不那么明显,因为Inception v3架构 http://arxiv.org/pdf/1512.00567v3.pdf因此,在不知道节点之间的连接的情况下,这种方法就像破解了谜题:)
- 然后我尝试使用自己编写的工具绘制该模型的图表(获取给定节点的所有输入(例如“pool_3:0”),然后获取“pool_3:0”每个输入的所有输入等。这该方法适用于简单的模型。但是当我尝试将其用于图像识别教程中的 inceptionv3 实现时,我使用了 16 GB 的 RAM,然后使用了 10 GB 的交换空间,然后我就停止了寻找引擎盖下的内容。也许有图中有一些循环(但是如果网络是前馈的,那怎么可能呢?)
所以,也许参与过这个预训练模型实现和“运输”的人正在阅读 stackoverflow。
或者也许有人已经为这个模型获得了分层名称。
请与我和机器学习社区分享。提前致谢!