python如何知道对象属性(方法)以及如何知道di的层次结构

2024-09-30 01:18:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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],所以我不知道这些数据和形状。在

我想知道什么是正确的方法剥离数据/对象而不事先知道。在


Tags: 数据对象方法网络reducedata参数net
1条回答
网友
1楼 · 发布于 2024-09-30 01:18:27

通常在这种情况下,我只需要检查BlobVec类的源代码,并找出__iter__方法实现和其他所有内容。但在你的情况下,它不会有帮助,因为^ {CD3}实际上是指向C++ implementation,当你可以发现它是向量,并在迭代时,如果你知道关于C++的事情,以及它如何绑定到Python和其他令人敬畏的东西:

所以,在你的情况下,最好检查一下文件。在Python section下面你会找到的

Caffe blobs are exposed as numpy ndarrays for ease-of-use and efficiency.

然后你应该找到关于numpy数组的文档,你就完成了。在

相关问题 更多 >

    热门问题