我正在使用caffe Python包装器。关于使用Python访问数据细节我有两个问题。
我首先通过以下方式加载了caffe net定义:
net = caffe.Net('deploy_full.prototxt',caffe.TEST)
我知道网络将是Python中的一个对象,我想知道其中的属性,所以我使用bulit-in dir()方法:
>>> dir(net)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__','__getattribute__', '__hash__', '__init__', '__module__','__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_backward', '_batch', '_blob_loss_weights', '_blob_names', '_blobs', '_forward', '_inputs', '_layer_names', '_outputs', '_set_input_arrays', 'backward', 'blob_loss_weights', 'blobs', 'copy_from', 'forward', 'forward_all', 'forward_backward_all', 'inputs', 'layers', 'outputs', 'params', 'reshape', 'save', 'set_input_arrays', 'share_with']
然后我使用params属性来查找net.params的键属性:
>>> net.params.keys()
['conv1a', 'bn1a', 'conv1b', 'bn1b', 'conv2a', 'bn2a', 'conv2b', 'bn2b', 'conv3a', 'bn3a', 'conv3b', 'bn3b', 'fc8-conv']
问题出在这里,我想知道net.params的详细信息[' bn1a']:
>>> net.params['bn1a']
<caffe._caffe.BlobVec object at 0x7f274b71fbb0>
>>> dir(net.params['bn1a'])
['__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__instance_size__', '__iter__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add_blob', 'append', 'extend']
这些输出不是我想要的,在谷歌搜索之后,我发现我希望看到是通过这些命令实现的:
>>> net.params['bn1a'][0].data.shape
(1, 16, 1, 1)
>>> net.params['bn1a'][1].data.shape
(1, 16, 1, 1)
我的问题是我怎么知道这个词中应该有[0],[1]和[x]?由于net.params.keys()只告诉我有关键字&#39; bn1a&#39;,但没有告诉我[num]。
此外,如果我不知道[&#39; bn1a&#39;]之后有[数字],我无法知道net.params [&#39; bn1a&#39]的属性;] [x],所以我无法知道这些数据和形状。
我想知道在事先没有知识的情况下剥离数据/对象的正确方法。
答案 0 :(得分:0)
通常在这种情况下,我会去检查BlobVec
类源代码并找出__iter__
方法实现和所有其他方法。但是在你的情况下它不会那么有用,因为caffe._caffe.BlobVec
实际上指向C++ implementation当你发现它是向量并且在迭代它时如果你知道关于C ++的事情以及它如何绑定Python和其他很棒的东西:)
所以在你的情况下,检查文档真的更好。在Python section下你会找到
Caffe blob暴露为numpy ndarray,易于使用和提高效率。
然后你应该找到关于numpy数组的文档,你完成了。