### 预训练的Inception v3模型(TensorFlow)的层名称 [重复]

任务是获取预训练的CNN Inception v3模型的每层输出。例如,我将一张图片输入到这个网络中,我不仅想得到它的输出,还想得到每一层的输出(按层)。

为了做到这一点,我必须知道每一层输出的名称。对于最后一层和倒数第二层来说,这很容易做到:

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

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

但如果我想获取的不仅仅是最后一层和倒数第二层的输出,还有倒数第三层、倒数第四层等,获取这个模型任何一层的输出呢?

那么我就必须知道层的名称。Stack Overflow上已经问过类似的问题,但只有倒数第二层和最后一层的名称,这些名称在源代码的注释中也可以找到(’pool_3:0′, ‘softmax:0’)

获取名称的明显方法是绘制模型的图。但情况并非如此,因为图形绘制工具简单地崩溃了。还有一个相关问题

我也尝试过:

  1. 打印所有图节点名称,并仅使用节点名称的信息构建图。但节点名称相当神秘。此外,由于Inception v3架构,节点之间的连接并不那么明显。因此,如果不知道节点之间的连接,这种方法就像破解恩尼格玛密码一样困难 🙂
  2. 然后我尝试使用自己编写的工具绘制这个模型的图(获取给定节点的所有输入(例如,’pool_3:0’),然后获取’pool_3:0’的所有输入的每个输入,等等。这个方法对简单的模型有效。但当我尝试在图像识别教程中的Inception v3实现上使用它时,我的RAM使用了16 GB,然后是10 GB的交换空间,然后我就不再深入探究了。可能是图中有循环(但如果网络是前馈的,怎么会这样呢?)

所以,可能参与这个预训练模型实现和“发布”的人正在阅读Stack Overflow。

或者可能有人已经获得了这个模型的按层名称。请与我和机器学习社区分享。提前感谢!


回答:

基础问题已经在TensorFlow中图中的张量名称列表中被问过(并回答过)。

关于你方法(2)的担忧,我的回答是:这是有效的(我已经做过)。如果我不得不猜测,你可能没有使用类似字典的结构来存储节点,所以如果多个节点从同一个节点获取输入(在Inception模型中经常发生),你会将该输入节点多次插入到你的存储/访问列表中。如果你注意只访问每个节点一次,那应该会立即运行而不会出现内存问题。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注