我正在使用caffe Python包装器。关于使用Python访问数据细节,我有两个问题。在
我首先加载了caffe net的定义:
net = caffe.Net('deploy_full.prototxt',caffe.TEST)
我知道net在Python中是一个对象,我想知道其中的属性,所以我使用了buildin dir()方法:
^{pr2}$然后我使用params属性来查找网络参数公司名称:
>>> net.params.keys()
['conv1a', 'bn1a', 'conv1b', 'bn1b', 'conv2a', 'bn2a', 'conv2b', 'bn2b', 'conv3a', 'bn3a', 'conv3b', 'bn3b', 'fc8-conv']
所以问题就在这里,我想知道关于网络参数['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键()只告诉我有钥匙'bn1a',但没有告诉我[num]。在
而且,如果我不知道['bn1a']后面有[num],我就无法知道网络参数['bn1a'][x],所以我不知道这些数据和形状。在
我想知道什么是正确的方法剥离数据/对象而不事先知道。在
通常在这种情况下,我只需要检查
BlobVec
类的源代码,并找出__iter__
方法实现和其他所有内容。但在你的情况下,它不会有帮助,因为^ {CD3}实际上是指向C++ implementation,当你可以发现它是向量,并在迭代时,如果你知道关于C++的事情,以及它如何绑定到Python和其他令人敬畏的东西:所以,在你的情况下,最好检查一下文件。在Python section下面你会找到的
然后你应该找到关于numpy数组的文档,你就完成了。在
相关问题 更多 >
编程相关推荐