TensorFlow,如何通过CNN查看内部' blob'

时间:2015-12-01 14:41:46

标签: python numpy caffe tensorflow

我目前正在使用来自https://github.com/AKSHAYUBHAT/TensorFace的VGG-face-discriptor。

VGG-face-discriptor使用VGG16和输出矢量2622,一些名人。  我真正需要的是第二个完全连接的层的响应,其大小为4096。  使用我上面提到的存储库提供的代码

import vggface
from pprint import pprint
import tensorflow as tf
input_placeholder = tf.placeholder(tf.float32, shape=(1, 224, 224, 3))
network = vggface.VGGFace()
ses = tf.InteractiveSession()
network.load(ses,input_placeholder)
output = network.eval(feed_dict={input_placeholder:vggface.load_image('test/ak.png')})[0]
pprint(sorted([(v,network.names[k]) for k,v in enumerate(output)],reverse=True)[:10])

工作得非常好,给我最贴心的名人脸。

结果:

[(13.686731, 'Aamir_Khan'),
 (8.4711819, 'Adam_Driver'),
 (8.0207777, 'Manish_Dayal'),
 (7.2776313, 'John_Abraham'),
 (6.8999376, 'Jacob_Artist'),
 (6.5390964, 'Adam_Copeland'),
 (6.4980922, 'Adrian_Paul'),
 (6.4170547, 'Akshay_Kumar'),
 (6.3718734, 'D.B._Woodside'),
 (6.0774565, 'Ajay_Devgn')]

output变量,我看到2622 numpy ndarry。 但我实际上想要第二个特征向量..我怎样才能实现这个目标?

我查看了所有TensorFlow教程代码,但找不到这样的内容。 有了Caffe,我只是

out = net.forward()
v = net.blobs['fc7'].data[0].copy()

简单就是这样。我如何看待' blob'在TensorFlow中? 使用numpy数组特征向量?

2 个答案:

答案 0 :(得分:7)

您可以使用session.run获取计算图中元素的当前值。

layer7_values = session.run(layer7_tf, feed_dict={<your inputs>})

在此示例中,sessiontf.Session()对象。 layer7_tf是对TensorFlow模型中图层的Tensor输出的引用,layer7_values将包含给定输入的图层值作为numpy数组。

要获得layer7_tf的句柄,您有几个选择。您可以修改TensorFace/vggface/init.py以返回对相应图层的引用;或者您可以浏览session.graph_def结构以查找与该张量对应的节点的name,并传递张量的字符串名称(例如layer7_tf/foo/bar:0,其中:0 }对应于名为layer7_tf/foo/bar的op的第0个输出,而不是session.run()

答案 1 :(得分:0)

哦......我想我找到了解决办法。

只删除TensorFace / vggface / init .py

中的一些行
# (37): nn.ReLU
# (38): nn.Dropout(0.500000)
# (39): nn.Linear(4096 -> 2622)
#self.layers.append(('linear','39',2622,False))
# (40): nn.SoftMax
#self.layers.append(('softmax'))

看起来有效