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



任务是获取预训练的CNN inceptionv3模型的每层输出。例如,我将图像馈送到这个网络,我不仅想获得它的输出,还想获得每一层的输出(逐层)。

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

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

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

但是,如果我不仅想获得最后一层

和最后一层的输出,还想获得该模型任何层的预前层、前层等的输出怎么办?

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

获取名称的明显方法是绘制模型的图形。但事实并非如此,因为图形绘制工具只是崩溃。还有一个与此相关的问题。

我也试过:

    打印所有图形节点名称
  1. 并仅使用来自节点名称的信息构造图形。但是节点名称非常神秘。另外节点之间的连接也不是那么明显,因为inception v3架构所以在不知道节点之间的连接的情况下,这种方法就像是破解了谜码:)
  2. 然后我尝试使用自己编写的工具绘制该模型的图形(获取给定节点的所有输入(例如,'pool_3:0'),然后获取每个输入的所有输入'pool_3:0'等。此方法适用于简单模型。但是当我尝试将其用于图像识别教程中的inceptionv3实现时,我使用了16 GB的RAM,然后是10 GB的交换,然后我就停止了查看引擎盖。也许图中有一些周期(但如果网络是前馈的,那怎么可能呢?

所以,也许有人参与了这个预先训练的模型实现和"运输"正在阅读stackoverflow。

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

基本问题已经在 Tensorflow 图中的张量名称列表中提出(并回答)

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

最新更新