我目前正在使用来自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()
很简单就是这样.我怎样才能在TensorFlow中看到'blob'?有numpy数组特征向量?
您可以使用session.run获取计算图中元素的当前值.
layer7_values = session.run(layer7_tf, feed_dict={})
在这个例子中session
是一个tf.Session()
对象.layer7_tf
是Tensor
对TensorFlow模型中图层输出的引用,layer7_values
它将包含给定输入的图层值作为numpy数组.
要掌握layer7_tf
,您有几个选择.您可以修改TensorFace/vggface/init.py
以返回对相应图层的引用; 或者您可以探索session.graph_def
结构以找到name
与该张量相对应的节点,并传递张量的字符串名称(例如layer7_tf/foo/bar:0
,:0
对应于所调用的op的第0个输出的位置layer7_tf/foo/bar
)session.run()
.