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

Ole*_*nko 6 python machine-learning computer-vision conv-neural-network tensorflow

任务是获得预先训练的cnn inceptionv3模型的每层输出.例如,我将图像提供给此网络,我不仅要获得其输出,还要获得每个图层的输出(逐层).

为了做到这一点,我必须知道每个图层输出的名称.对于last和last-last图层来说,这很容易做到:

sess.graph.get_tensor_by_name('pool_3:0')
sess.graph.get_tensor_by_name('softmax:0')
Run Code Online (Sandbox Code Playgroud)

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

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

然后我必须知道图层名称. 在stackoverflow上也提出了类似的问题,但是只有前一个和最后一个层的名称,这些名称也可以在源中的注释中找到('pool_3:0','softmax:0')

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

我也尝试过:

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

所以,也许参与这个预先训练过的模型实现和'运输'的人正在阅读stackoverflow.

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

eta*_*ion 3

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

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