预训练初始 v3 模型的层名称 (tensorflow)

Layer names for pretrained inception v3 model (tensorflow)

任务是获取 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 列在与模型相关的来源中)

但是,如果我不仅想获得最后一层和前最后一层的输出,而且还想获得此模型任何层的前前前、后前前前等输出,该怎么办?

然后我必须知道图层名称。一个类似的问题 在 Whosebug 上,但只有 pre-last 和 last layers 的名称,这些名称也可以在源代码的注释中找到('pool_3:0', 'softmax:0')

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

我也试过:

  1. 打印所有图形节点名称并仅使用来自节点名称的信息构建图形。但是节点名称非常神秘。而且节点之间的联系不是很明显,因为inception v3 architecture 所以在不知道节点之间的联系的情况下,这种方法就像破解密码一样:)
  2. 然后我尝试使用自己编写的工具绘制该模型的图形(获取给定节点的所有输入(例如,'pool_3:0'),然后获取[=40=的每个输入的所有输入], 等。这种方法适用于简单的模型。但是当我尝试将它用于图像识别教程中的 inceptionv3 实现时,我使用了 16 GB 的 RAM,然后是 10 GB 的交换空间,然后我就不再寻找了引擎盖。也许图中有一些循环(但是如果网络是前馈的怎么可能?)

所以,也许参与过这个预训练模型实施的人 'shipping' 正在阅读 Whosebug。

或者也许有人已经为该模型获得了分层名称。 请与我和 ml 社区分享。提前致谢!

基本问题已在

中提出(并回答)

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