Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在TensorFlow中的预训练模型中获得maxpool层的输出?_Tensorflow_Deep Learning - Fatal编程技术网

如何在TensorFlow中的预训练模型中获得maxpool层的输出?

如何在TensorFlow中的预训练模型中获得maxpool层的输出?,tensorflow,deep-learning,Tensorflow,Deep Learning,我有一个我训练过的模特。我希望从模型中提取中间maxpool层的输出。 我尝试了以下方法 saver=tf.train.import\u meta\u图(BASE\u DIR+LOG\u DIR+'/model.ckpt.meta') saver.restore(sess、tf.train.latest_checkpoint(基本目录+日志目录)) sess.run(“maxpool/maxpool”,feed\u dict=feed\u dict) 此处,feed\u dict包含字典中此运

我有一个我训练过的模特。我希望从模型中提取中间maxpool层的输出。 我尝试了以下方法

saver=tf.train.import\u meta\u图(BASE\u DIR+LOG\u DIR+'/model.ckpt.meta')
saver.restore(sess、tf.train.latest_checkpoint(基本目录+日志目录))
sess.run(“maxpool/maxpool”,feed\u dict=feed\u dict)
此处,
feed\u dict
包含字典中此运行的占位符及其内容

我一直得到以下错误

InvalidArgumentError(回溯见上文):必须为占位符张量'placeholder_1_1'提供一个值,其中包含dtype float和shape。。。

这可能是什么原因?我生成了所有占位符并将它们输入到提要字典中

我遇到了一个类似的问题,令人沮丧。让我绕过它的是为我以后要调用的每个变量和操作填写
name
字段。您还可能需要使用
tf将
maxpool/maxpool
op添加到集合中。将\u添加到\u集合('name\u表示\u maxpool\u op',maxpool\u op\u句柄)
。然后,可以使用以下命令恢复ops和命名张量:

#从元图还原。
saver=tf.train.import\u元图(…)
sess=tf.Session()
saver=还原(sess,…)
graph=sess.graph
#恢复你的运算和张量。
maxpool_op=tf.get_collection('name_for_maxpool_op')[0]#返回一个列表,如果需要第一个元素
a_tensor=graph.get_tensor_by_name('tensor_name:0')#需要在名称中添加:0
然后,您将使用恢复的张量构建您的
feed\u dict
。此外,正如您在评论中提到的,您需要将op本身传递给sess.run,而不是它的名称:

sess.run(maxpool\u op,feed\u dict=feed\u dict)
您可以从恢复的元图访问您的张量和操作,即使您没有命名它们(例如,为了避免使用新的花哨的张量名称重新训练模型),但这可能有点麻烦。自动为张量命名并不总是最透明的。您可以使用以下命令列出图形中所有变量的名称:

print([tf.all_variables()中v的v.name]

你可以在那里找到你正在寻找的名称,然后使用
图形还原该张量。如上所述,通过名称获取张量。

我想避免重新训练模型。所以,我做错了几件事。第一件事(这里没有显示)是我为输入重新创建了占位符,而不是从图中提取它们。所以它应该是这样的:
input\u name==graph.get\u tensor\u by\u name(“占位符:0”)
。我做错的第二件事是输入op的名称,而不是op本身,因此它应该是这样的
maxpool\u op=graph.get\u operation\u by\u name(“maxpool/maxpool”)
,然后
sess.run(maxpool\u op.outputs[0],feed_dict=feed_dict
不知何故,你的答案为我指明了正确的方向,所以10xOh太棒了,我很高兴它有帮助,尽管它看起来需要改进。不想保留是有意义的。我会稍微修改我的答案以反映这一点。我知道所有的张量都在那里,用它们的默认名称很难找到它们.