预训练初始v3模型的层名称(张量流)

时间:2016-03-02 07:06:12

标签: python machine-learning computer-vision tensorflow conv-neural-network

任务是获得pretrained cnn inceptionv3模型的每层输出。 例如,我将图像提供给该网络,我不仅要获得其输出,还要获得每个图层的输出(逐层)。

为了做到这一点,我必须知道每个图层输出的名称。对于最后一层和前一层,这很容易做到:

sess.graph.get_tensor_by_name('pool_3:0')
sess.graph.get_tensor_by_name('softmax:0')

(名称pool_3:0和softmax:0列在与模型相关的来源中)

但是,如果我想获得不仅是最后一层和前一层的输出,而且还要预先输出前一个,前一个前一个,等等,输出该模型的任何一层?

然后我必须知道图层名称。一个类似的问题has been asked  在stackoverflow上,但只有前一个和最后一个图层的名称,这些名称也可以在来源的评论中找到(' pool_3:0',' softmax:0')

获取名称的明显方法是绘制模型图。但事实并非如此because graph-drawing tool simply crashes。 还有issue与此相关。

我也尝试过:

  1. 使用仅来自节点名称的信息打印所有图形节点名称并构造图形。但是节点名称非常神秘。节点之间的连接也不是那么明显,因为inception v3 architecture所以不知道节点之间的连接,这种方法就像打破了谜团的代码:)
  2. 然后我尝试使用自己编写的工具绘制此模型的图形(获取给定节点的所有输入(例如,' pool_3:0'),然后获取每个输入的所有输入& #39; pool_3:0'等。这种方法适用于简单模型。但是当我尝试将它用于图像识别教程的inceptionv3实现时,我使用了16 GB的RAM,然后是10交换的GB,然后我就停止了查看引擎盖。也许图中有一些周期(但如果网络是前馈的话怎么可能?)
  3. 所以,也许有人参加了这个预先训练过的模型实施和'航运'正在阅读stackoverflow。

    或许有人已经为这个模型提供了分层名称。 请与我和ml社区分享。提前谢谢!

1 个答案:

答案 0 :(得分:2)

已在List of tensor names in graph in Tensorflow

中询问(并回答)基本问题

用您的方法回答您的问题(2) - 这确实有效(我已经完成了)。如果我不得不猜测,您可能不会使用类似字典的结构来存储节点,因此如果多个节点从同一节点获取输入(就像在初始模型中发生了很多),则插入该输入节点在您要存储/访问的事物列表中多次。如果你只注意每个节点访问一次,它应该基本上立即运行而没有内存问题。